Reputation: 14588
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"
}
}
}
]
Upvotes: 63
Views: 63813
Reputation: 2875
Use npm
, yarn
or WebPack
instead of Composer they are way better for that kind of needs.
Upvotes: 1
Reputation: 732
you can install jquery by using npm like so,
npm install jquery
https://www.npmjs.com/package/jquery
Upvotes: 1
Reputation: 8550
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": "*"
}
}
}
}
Upvotes: 2
Reputation: 1638
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).
Upvotes: 48
Reputation: 1090
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"
Upvotes: 37