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

时间:2017-06-13 08:14:54

标签: node.js reactjs npm

我有两个模块 - 我的主项目和组件库 - 我想将lib链接到主项目。两者都在使用webpack并做出反应。所以我做了:

在comp-lib目录中:

  

npm link

在项目目录中:

  

npm link comp-lib

软件包显示在node_modules文件夹中,但是当我处理组件库时,更改不会反映在主项目中。我错过了什么?

我无法在Google上找到关于此问题的内容,而npm链接文档只是说明了这个例子:“现在,对〜/ projects / node-redis的任何更改都会反映在〜/ projects / node-bloggy中/ node_modules /节点redis的/“。

4 个答案:

答案 0 :(得分:9)

链接包有类似问题 - npm link dep正在挑选旧版“dep”。

在“dep”文件夹中再次运行npm link解决了这个问题。理论上它应该只调用一次,但由于某种原因它有时会失去同步。

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

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

答案 1 :(得分:0)

可能是因为您在组件上增加了版本,却忘记增加主项目中的版本。 然后,任何npm操作都将下载package-lock.json中指示的版本:过时的版本,从而删除由npm link设置的链接。

答案 2 :(得分:0)

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

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

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "invalidParameter",
                "message": "Invalid field selection createdTime",
                "locationType": "parameter",
                "location": "fields"
            }
        ],
        "code": 400,
        "message": "Invalid field selection createdTime"
    }
}

(用您的软件包名称替换“ my-lib”)

然后,只要您更改库中的某些内容,就只需调用"scripts": { "clean": "if exist dist ( rd /S /Q dist)", "updateLink": "npm run clean && tsc && npm rm my-lib -g && npm link" }

它的作用:

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

答案 3 :(得分:0)

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

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