11

我已经搜索过其他问题,例如这个问题,但它们似乎都是关于当地人npm link因我以外的其他原因停止工作。我认为这是一个常见的用例问题,所以如果我在系统上做错了什么,我很乐意接受关于我该如何做的建议。

主要是,我有一个正在开发的私有 npm 模块,名为@organisation/module. 在本地工作时,我会npm link在它上面运行,并在我的“主机”项目中使用它npm link @organisation/module——这一切都适用于热重载等。我还将它导入为import module from '@organisation/module.

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

这似乎打破了npm link我之前设置的隐式......我认为主要是因为它们是同名的,并且 npm 更喜欢installa link

当我想再次进行实时本地更改时,我目前可以让它工作的唯一方法是通过npm uninstall @organisation/module然后重新链接它。

有没有办法保持已发布的模块安装(为了避免粗心的错误,比如忘记重新安装它以进行构建测试),但总是偏爱本地链接实例?

参考图: 参考图

4

3 回答 3

4

您是否尝试过使用提供的其他方法进行本地安装npm

npm install /absolute/path/packageName

我相信这会将您的条目更改package.json为如下所示:

"dependencies" {
    ...
    "packageName": "file:../../path/to/packageName",
    ...
}
于 2018-10-03T19:18:18.683 回答
1

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

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

希望这可以帮助 :)

于 2018-10-03T19:04:34.877 回答
-1
  1. 转到本地包所在的目录,package.json将名称从 original_name 更改为“original_name_local”。

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

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

  4. 现在无论您身在何处requiringimporting将名称更新为“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

于 2018-10-09T07:54:19.570 回答