我已经搜索过其他问题,例如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
,然后重新链接它。
是否有一种方法可以保持已发布模块的安装状态(以避免粗心大意的错误,例如忘记为进行构建测试而重新安装它),但始终偏爱本地的链接实例?
答案 0 :(得分:2)
您是否尝试过使用npm
提供的另一种方法进行本地安装。
npm install /absolute/path/packageName
我相信这会更改您在package.json
中的输入,如下所示:
"dependencies" {
...
"packageName": "file:../../path/to/packageName",
...
}
答案 1 :(得分:1)
转到本地包所在的目录,打开package.json
,将名称从original_name更改为“ original_name_local”。
在同一位置的终端上写入npm link
。
此后,转到您的工作目录并输入npm install <path to local>
现在无论您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
希望这会有所帮助:)