How to install jQuery with Composer?

PhpSymfonyComposer Php

Php Problem Overview


I have been able to install repositories that do not have a composer.json file like this:

    {
		"type": "package",
		"package": {
			"name": "yahoo/yui-compressor",
			"version": "2.0.4",
			"dist": {
				"url": "http://yui.zenfs.com/releases/yuicompressor/yuicompressor-2.4.7.zip",
				"type": "zip"
			}
		}
	},
	

I took the "type": "zip" part from the docs, but I couldn't find many other types. For example, I need to install jQuery, but I don't know what to put in type ("js" did not work).

    {
		"type": "package",
		"package": {
			"name": "jquery/jquery",
			"version": "1.7.2",
			"dist": {
				"url": "http://code.jquery.com/jquery-1.7.2.js",
				"type": "js"
			}
		}
	}

Any ideas?

EDIT: I'm adding the full solution to help @CMCDragonkai:

    "require": {
        "vendorname/somefile": "1.2.3",
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "vendorname/somefile",
                "version": "1.2.3",
                "dist": {
                    "url": "http://example.com/somefile.txt",
                    "type": "file"
                }
            }
        }
    ]

Php Solutions


Solution 1 - Php

Actually there is an easier way to install jQuery, just type:

{
    "require": {
        "components/jquery": "1.9.*"
    }
}

It uses Component Installer for Composer and by default all assets from Component are installed under components, but it can be customize. (see docs).

Solution 2 - Php

This is simply a missing feature. There should probably be a new type of dist which is just a single plaintext file to be downloaded and left as-is. Please file a feature request on the github issue tracker: https://github.com/composer/composer/issues/

EDIT :

The feature actually exists but wasn't documented.

"type": "file"

Solution 3 - Php

As outlined already, part one of the solution is defining you own repositories and the "type: ": "file" repository definition option. But a subsequent issue is getting composer to put the JQuery where you want it. As it stands, composer seems to be limited to downloading dependency source under vendor-dir (which is annoying but probably related to autoloading requirements). The general fix to this limitation is to write a composer plugin that overcomes it. Seems to be a few plugins that can manage this. The simplest most lightweight solution I've found is PHP Composer Asset Manager, which is dedicated to managing non PHP/Composer "assets". Though, it has at least one limitation in that changes that the plugin makes are not managed/detected by composer. Still usable.

Here's a full composer.json to install JQuery using that plugin:

{
  "name": "foo/bar",
  "require":
  {
    "phpclasses/assets": "*",
     "jquery/jquery": "*"
  },
  "repositories": [
    {
     "type": "composer",
     "url": "http://www.phpclasses.org/"
    },
    {
      "type": "package",
      "package": {
        "name": "jquery/jquery",
        "version": "1.7.2",
        "type": "jquery",
        "dist": {
          "url": "http://code.jquery.com/jquery-1.7.2.js",
          "type": "file"
        }
      }
    }
  ],
  "extra": {
    "assets": {
      "actions": [
        {
          "type": "copy",
          "target": "webroot/js",
          "pattern": "\\.js$"
        }
      ],
      "packages": {
        "jquery/jquery": "*"
      }
    }
  }
}

Solution 4 - Php

Use npm, yarn or WebPack instead of Composer they are way better for that kind of needs.

Solution 5 - Php

you can install jquery by using npm like so,

npm install jquery

https://www.npmjs.com/package/jquery

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChocoDeveloperView Question on Stackoverflow
Solution 1 - PhpCésarView Answer on Stackoverflow
Solution 2 - PhpnadermanView Answer on Stackoverflow
Solution 3 - PhpspinkusView Answer on Stackoverflow
Solution 4 - Phpsnoob doggView Answer on Stackoverflow
Solution 5 - PhpCecilMerrell aka bringrainfireView Answer on Stackoverflow