在 comp-lib 目录下: npm link
在项目目录下: npm link comp-lib
该软件包出现在 node_modules 文件夹中,但是当我在组件库上工作时,主项目中的更改并没有反映出来。我漏掉了什么?
我在 Google 上找不到与此问题相关的内容,而 npm link 文档只是说了一个例子:"现在,对 ~/projects/node-redis 的任何更改都将反映在 ~/projects/node-bloggy/node_modules/node-redis/ 中。"
使用npm link命令时,遇到了与已链接的软件包相关的类似问题 - npm link dep
始终选择旧版本的“dep”。
在“dep”文件夹中再次运行 npm link
命令可解决此问题。理论上应该只调用一次,但由于某些原因它有时会失步。
因此,为了可靠地更新链接的项目,请在每次更改后执行以下步骤:
npm link
npm link dep
npm link ../path/to/dep
来代替分两步操作的方式。 - Dana Woodman我不太记得具体出了哪些问题,也不确定是否有必要,但对我来说,它非常有效。
我将以下迷你脚本添加到 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
即可。
它的作用:
sh: -c: line 0: syntax error near unexpected token
('
sh: -c: line 0: if exist dist ( rd /S /Q dist)'
。 - Sergino确保主项目和依赖项目的Node版本完全匹配。
如果您使用nvm
管理多个项目的多个节点版本,则npm link
将仅在从中启动npm link
(即依赖项目)的节点版本中生成符号链接。
现在是2023年,npm似乎仍然存在一些问题,特别是在使用npm link
时,这是他们的github问题中普遍存在的烦恼。如果其他答案都不适用于您,以下方法似乎可以解决问题:
选项1:为本地包设置唯一版本号
version
设置为完全唯一的内容,即以前从未发布过的内容。假设您将其设置为1.1.99
npm link
npm link mypackage@1.1.99
这个问题的一个来源似乎是npm对您尝试链接的内容感到困惑。由于您从未将1.1.99发布到云端甚至本地,因此npm实际上无法将mypackage@1.1.99
与除您刚刚创建的本地版本之外的任何内容混淆。令人恼火的是,您当然需要记住在package.json中恢复版本号更改。
选项2:删除nodule_modules
缓存
选项1对我们来说一直很可靠;有时候需要更快的方法,通常情况下可以运行以下命令(不是在包中,而是在使用该包的项目中):
rm -rf node_modules/.cache/ && npm link mypackage
npm有时会缓存mypackage的某些旧引用,这似乎可以解决问题。
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"
}
npm link
会创建一个符号链接,因此它基本上是同一个文件夹。您是否确保在修改后重新构建了 comp-lib,因为 package.json 中main
字段指定的文件将被使用? - HiDeoo/usr/local/lib/node_modules
),第二个命令则从这个之前的全局文件夹创建一个符号链接到project-dir/node_modules/comp-lib
。也许你可以检查一下这些链接是否有效并指向正确的文件夹。 - HiDeoo