25

我想从一个名为“mymodule”的github tarball中安装一个特定的修订版,并将其命名为“mymoduleTemp”,然后加载一个可能不同的版本,该版本将采用真实名称“mymodule”。

那么,我该怎么做第一件事呢?我正在寻找类似的东西:

npm install https://github.com/me/mymodule/tarball/someTag -name mymoduleTemp

有没有办法做到这一点?一个不错的:

  • 如果 mymodule 已经存在,则在安装 mymoduleTemp 时它不会被破坏(即理想情况下,该过程不会安装为 mymodule 然后重命名文件夹)
4

5 回答 5

28

因为npm@6.9.0您可以在自定义模块名称下安装包。npm@6.9.0 引入了对包别名的支持。

要在自定义模块名称下安装 tarball,请使用custom-name@tarball-url参数,例如将特定的expresstarball 安装为my-express模块:

npm i my-express@https://github.com/expressjs/express/archive/4.16.3.tar.gz

此功能还允许为发布到 npm 注册表的包起别名:

npm i express@npm:@my-scope/express

于 2019-03-11T10:01:58.507 回答
23

在较新版本的 npm (6+) 中,现在可以使用

npm i <alias_name>@npm:<original_package_name>
于 2019-10-03T11:28:36.357 回答
9

在 npm-github 存储库中提交了一个请求该功能的问题。

在这里阅读:https ://github.com/npm/npm/issues/2943

于 2013-06-15T21:55:00.160 回答
1

你可以这样做:

  1. 获取 tarball 并解压
  2. name将其更改package.json@me/mymoduleTemp(您可以通过编辑 tarball 来跳过步骤 1 和 3 vim mymoduleTemp.tgz
  3. 将其压缩为mymoduleTemp.tgz
  4. 运行npm publish mymoduleTemp.tgz--access public除非您希望它受到限制)
  5. 在您的主项目中,运行npm install @me/mymoduleTemp

我建议将其发布为scoped package,因为如果您将其发布为 unscoped mymoduleTemp,那么其他人将无法使用该名称。

如果您认为发布范围包会污染 npm 注册表,那么您可以将新的 tarball 放在您自己的私有服务器(或 GitHub 或任何地方)上,然后通过 URL 安装它。

于 2017-05-31T20:44:49.017 回答
1

特别是对于浏览器,您可以在package.json

https://github.com/defunctzombie/package-browser-field-spec

例如:

{
  ....
  "browser": {
    "someTag": "mymoduleTemp"
  }
}

这也适用于Metro bundler 的“react-native”。我从来没有用 webpack 包测试过。

于 2018-07-23T21:17:53.417 回答