如何使npm偏爱本地链接依赖而不是其发布的安装

时间:2018-09-20 11:04:42

标签: node.js npm npm-link

我已经搜索过其他问题,例如this one,但它们似乎都是关于本地npm link停止工作的原因,而不是我的原因。我认为这是一个常见的用例问题,因此,如果我有条不紊地做错了事,我很乐意就我应该如何做提出建议。

主要,我有一个专用的npm模块,名为@organisation/module。在本地工作时,我将在其上运行npm link,并在我的“宿主”项目中以npm link @organisation/module的形式使用它-在热重装等方面都很好用。我还将其导入为import module from '@organisation/module

但是,由于我还想不时将本地更改发布到npm(作为@organisation/module),因此对于构建测试和生产代码,我需要在宿主项目上运行npm install @organisation/module

然后这似乎破坏了我之前设置的隐式npm link ...我认为主要是因为它们是相同的名称,并且npm比install更喜欢link? / p>

当我想重新进行本地更改时,当前使它生效的唯一方法是通过npm uninstall @organisation/module,然后重新链接它。

是否有一种方法可以保持已发布模块的安装状态(以避免粗心大意的错误,例如忘记为进行构建测试而重新安装它),但始终偏爱本地的链接实例?

参考图: Diagram for ref

3 个答案:

答案 0 :(得分:2)

您是否尝试过使用npm提供的另一种方法进行本地安装。

npm install /absolute/path/packageName

我相信这会更改您在package.json中的输入,如下所示:

"dependencies" {
    ...
    "packageName": "file:../../path/to/packageName",
    ...
}

答案 1 :(得分:1)

  1. 转到本地包所在的目录,打开package.json,将名称从original_name更改为“ original_name_local”。

  2. 在同一位置的终端上写入npm link

  3. 此后,转到您的工作目录并输入npm install <path to local>

  4. 现在无论您requiring还是importing,都将名称更新为“ original_name_local”

例如,如果它是require('space-cleaner'),则将其更改为require('space-cleaner_local')

像这样,您既可以在本地也可以在生产包中使用,只需在需要时更改名称即可。

否则,您可以通过从package.json中将其删除并从node_modules中删除来删除该软件包。

如果需要本地,请转到本地软件包目录,并在终端上写npm link,然后在工作目录上写npm install ./path/to/package

如果生产,则再次按照上述说明删除该程序包,并写上npm install package_name

答案 2 :(得分:0)

由于npm link在全局文件夹中创建符号链接,而npm install在项目本地,因此npm安装优先。您可以在此处阅读有关npm链接的信息:https://docs.npmjs.com/cli/link

为避免这种情况,我的建议是使用npm install <path to local>,当您需要使用生产代码时,请使用npm install @organization/module。这将根据代码更新您的node_modules。在此处阅读有关npm install的信息:https://docs.npmjs.com/cli/install

希望这会有所帮助:)