与 npm 链接链接的包不更新

问题描述 投票:0回答:6

我有两个模块——我的主项目和一个组件库——我想在其中将库链接到主项目。两者都在使用 webpack 和 React。所以我做了:

在 comp-lib 目录中:

npm 链接

在项目目录中:

npm 链接编译库

包显示在 node_modules 文件夹中,但是当我在组件库上工作时,更改没有反映在主项目中。我错过了什么?

我在谷歌上真的找不到关于这个问题的东西,npm 链接文档只是说了这个例子:“现在,对 ~/projects/node-redis 的任何更改都将反映在 ~/projects/node-bloggy/node_modules /节点-redis/。”

node.js reactjs npm
6个回答
32
投票

与链接包有类似的问题-

npm link dep
正在选择旧版本的“dep”。

在“dep”文件夹中运行

npm link
(再次)解决了这个问题。理论上它应该只被调用一次,但由于某种原因它有时会不同步。

因此,为了可靠地更新链接项目,请在每次更改后执行以下步骤:

  1. 重建链接项目
  2. 奔跑
    npm link
  3. 在宿主项目中运行
    npm link dep

5
投票

我不记得我到底遇到了什么问题,我也不确定是否所有这些都是必要的,但对我来说效果很好。

我将以下迷你脚本添加到 package.json 脚本列表中

"scripts": {
  "clean": "if exist dist ( rd /S /Q dist)",
  "updateLink": "npm run clean && tsc && npm rm my-lib -g && npm link"
}

(用你的包名替换“my-lib”)

然后只要在库中更改某些内容,只需调用

npm run updateLink

它的作用:

  • npm run clean 删除 dist 文件夹。如果您已重命名文件并且 typecript 编译器不会删除旧文件而是并行构建新文件,则很有用
  • tsc 编译 ts->js 到 dist 文件夹
  • npm rm my-lib -g && npm link 删除您的库并从全局模块文件夹中再次添加它。我不记得为什么我必须先删除它,但我猜它解决了一些问题。

5
投票

确保主项目和依赖项目的Node版本精确匹配。

如果您使用

nvm
管理多个节点版本上的多个项目,
npm link
将仅在
npm link
启动的节点版本(即依赖项目)中生成符号链接。


1
投票

可能是你在你的组件上升级了版本,而忘记了在你的主项目上增加版本。 然后,任何

npm
操作都会下载
package-lock.json
中指示的版本:过时版本,从而删除
npm link
设置的链接。


0
投票

我的问题是在这种情况下我的模块/包正在导出构建文件。我没有修复它,因为我们从多个组件导出多个文件,但如果您遇到这个问题,请将

main
(在我的例子中是
exports
)更改为导出模块的任何文件

  "main": "./dist/shared-lib.umd.js",
  "module": "./dist/shared-lib.es.js",
  "exports": {
    ".": {
      "import": "./dist/shared-lib.es.js",
      "require": "./dist/shared-lib.umd.js"
    },
    "./style": "./dist/style.css"
  }


0
投票

2023,npm 似乎仍然有很多问题

npm link
,这是他们 github 问题中的一个普遍的挫败感。如果其他答案都不适合您,以下似乎可以为我们解决问题:

选项 1:给您的本地包一个唯一的版本号

  1. 在您正在处理的本地包中(OP 称其为他们的组件库)将 package.json 中的
    version
    设置为完全独特的东西,以前从未发布过的东西。假设你做到了
    1.1.99
  2. 构建包,然后运行
    npm link
  3. 在你要使用包的项目中,运行
    npm link [email protected]

这个问题的一个根源似乎是 npm 与你试图

npm link
的东西混淆了。由于您从未将 1.1.99 发布到云端甚至本地,因此 npm 不能真正混淆
[email protected]
与您刚创建的包的本地版本以外的任何内容。烦人的是,你当然需要记住恢复 package.json 中的版本号更改

选项2:删除

nodule_modules
缓存

选项 1 对我们来说很可靠;一些似乎通常有效的更快的东西;在您的项目中运行它(不是在包中,而是在使用该包的项目中):

rm -rf node_modules/.cache/ && npm link mypackage

npm 缓存一些对 mypackage 的旧引用有时是问题的根源,这似乎解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.