NodeJS 与npm链接链接的包不更新

v7pvogib  于 2023-01-16  发布在  Node.js
关注(0)|答案(5)|浏览(585)

我有两个模块--主项目和组件库--我想把库链接到主项目,这两个模块都使用webpack和react,所以我做了:
在comp-lib目录中:
npm链接
在项目目录中:
npm链接组件库
包显示在node_modules文件夹中,但是当我处理组件库时,更改没有反映在主项目中。我错过了什么?
我在Google上找不到关于这个问题的任何东西,而npm链接文档只是提到了这个例子:现在,对~/projects/node-redis所做的任何更改都将反映在~/projects/node-bloggy/node_modules/node-redis/中。

vh0rcniy

vh0rcniy1#

链接包也有类似的问题-npm link dep正在拾取旧版本的“dep”。
在“dep”文件夹中运行npm link(再次)解决了这个问题。理论上它应该只被调用一次,但由于某种原因它有时会不同步。
因此,为了可靠地更新链接项目,请在每次更改后执行以下步骤:
1.重新生成链接项目
1.运行npm link
1.在宿主项目中运行npm link dep

c6ubokkw

c6ubokkw2#

我不记得我到底有什么问题,我也不知道是否所有这些都是必要的,但对我来说,它的工作很好。
我向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文件夹。如果您重命名了文件,并且类型脚本编译器不删除旧文件而是并行生成新文件,则此选项非常有用
      • tsc**将ts-〉js编译到dist文件夹
      • npm rm my-lib-g && npm link**来删除你的lib并从全局模块文件夹中重新添加它。我不记得为什么我必须先删除它,但我猜它解决了一些问题。
yeotifhr

yeotifhr3#

确保主项目和依赖项项目的节点版本精确匹配。
如果您使用nvm来管理多个节点版本上的多个项目,则npm link将仅在启动npm link的节点版本(即依赖项目)中生成符号链接。

l5tcr1uw

l5tcr1uw4#

可能是因为您升级了组件的版本,而忘记增加主项目的版本,那么,任何npm操作都会下载package-lock.json:过时的版本,从而移除由npm link建立的链接。

i7uaboj4

i7uaboj45#

我的问题是我的模块/包在本例中导出构建文件。我没有修复它,因为我们从多个组件导出多个文件,但如果您遇到这个问题,请将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"
  }

相关问题