我有两个模块——我的主项目和一个组件库——我想在其中将库链接到主项目。两者都在使用 webpack 和 React。所以我做了:
在 comp-lib 目录中:
npm 链接
在项目目录中:
npm 链接编译库
包显示在 node_modules 文件夹中,但是当我在组件库上工作时,更改没有反映在主项目中。我错过了什么?
我在谷歌上真的找不到关于这个问题的东西,npm 链接文档只是说了这个例子:“现在,对 ~/projects/node-redis 的任何更改都将反映在 ~/projects/node-bloggy/node_modules /节点-redis/。”
与链接包有类似的问题-
npm link dep
正在选择旧版本的“dep”。
在“dep”文件夹中运行
npm link
(再次)解决了这个问题。理论上它应该只被调用一次,但由于某种原因它有时会不同步。
因此,为了可靠地更新链接项目,请在每次更改后执行以下步骤:
npm link
npm link dep
我不记得我到底遇到了什么问题,我也不确定是否所有这些都是必要的,但对我来说效果很好。
我将以下迷你脚本添加到 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
。
它的作用:
确保主项目和依赖项目的Node版本精确匹配。
如果您使用
nvm
管理多个节点版本上的多个项目,npm link
将仅在 npm link
启动的节点版本(即依赖项目)中生成符号链接。
可能是你在你的组件上升级了版本,而忘记了在你的主项目上增加版本。 然后,任何
npm
操作都会下载package-lock.json
中指示的版本:过时版本,从而删除npm link
设置的链接。
我的问题是在这种情况下我的模块/包正在导出构建文件。我没有修复它,因为我们从多个组件导出多个文件,但如果您遇到这个问题,请将
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"
}
2023,npm 似乎仍然有很多问题
npm link
,这是他们 github 问题中的一个普遍的挫败感。如果其他答案都不适合您,以下似乎可以为我们解决问题:
选项 1:给您的本地包一个唯一的版本号
version
设置为完全独特的东西,以前从未发布过的东西。假设你做到了1.1.99
npm link
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 的旧引用有时是问题的根源,这似乎解决了问题。