工作原理

Asset Packagist 提供关于Bower和NPM包的信息,类似于Packagist为Composer包的信息。

因此,当您在启用资源包(Asset Package)的项目中运行composer,composer知道bower-asset和npm-asset包的所有可用版本,并知道如何下载它们的文件。

首先将 Bower 和 NPM 包 加入到我们自己的仓库中. 脚本会收集包信息并且以Packagist的格式处理json文件. 例如,你可以看看我们有什么用 Bower moment 包:

https://asset-packagist.cn/p/bower-asset/moment/latest.json

该文件包含了该包的所有版本的说明,格式如下:


    "2.13.0.0": {
      "uid": 1000600,
      "name": "bower-asset/moment",
      "version": "2.13.0.0",
      "type": "bower-asset",
      "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/moment/moment/zipball/d6651c21c6131fbb5db891b60971357739015688",
        "reference": "d6651c21c6131fbb5db891b60971357739015688"
      },
      "source": {
        "type": "git",
        "url": "https://github.com/moment/moment.git",
        "reference": "d6651c21c6131fbb5db891b60971357739015688"
      }
    },
    

所以,当您运行composer时,它会下载Asset Packagist 库提供的包信息,然后 Composer 解析依赖项并找到所需包的正确版本,然后将包文件下载到项目的vendor目录中 (实际上composer并不关心这些文件是PHP还是JS或其他文件).

所有的JSON文件都作为静态文件存储在 Asset Packagist 端, 项目中 Composer 会有效的找到这些文件,这样一切都能尽快完成。

安装到自定义路径

Asset Packagist 不是插件, 所以他不受 Composer的包安装位置所限制.
默认 bower-asset/bootstrap 包将会安装到 vendor/bower-asset/bootstrap 目录中.

你可以通过 oomphinc/composer-installers-extender 插件,来自定义安装路径,如:


    "require": {
        "oomphinc/composer-installers-extender": "^1.1",
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    },
    "extra": {
        "installer-types": ["bower-asset", "npm-asset"],
        "installer-paths": {
            "public/assets/{$vendor}/{$name}/": ["type:bower-asset", "type:npm-asset"]
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.cn"
        }
    ]
    

Yii2

Yii2 默认会将 Bower 和 NPM 包 分别安装到 vendor/bowervendor/npm目录中.

因此, 在Yii2项目中引用 asset-packagist, 必须在程序的配置文件中重新指定 Bower 和 NPM 别名的映射,如:


    $config = [
        ...
        'aliases' => [
            '@bower' => '@vendor/bower-asset',
            '@npm'   => '@vendor/npm-asset',
        ],
        ...
    ];
    

从 composer-asset-plugin 迁移

在同一台服务器中运行了多个应用时,从 composer-asset-plugin迁移是个麻烦事. 你需要注意:当这个插件在全局安装时, asset packagist 与 asset plugin 同时存在会有冲突. 所以, 为了不影响其他应用的情况下停掉这个插件, 你可以通过在 composer.json 文件中 config 选项中禁用掉这个插件。 (你的 plugin 版本需要 ≥ 1.3.0 ):


    "config": {
        "fxp-asset": {
            "enabled": false
        }
    }
    

致谢

提供优化版本的中文开发者 haohetao/asset-packagist.dev

原始作者 hiqdev/asset-packagist.dev

这个项目基于 Francois Pluchino's composer-asset-plugin 来转换 Bower 和 NPM 包信息成为 Composer 格式.

搜索驱动 https://libraries.io/.