当尝试解决安装本地模块(即 . npm install ../myPackage
)和不想要符号链接的问题时,此 Stack Overflow 页面出现在 Google 搜索结果中。所以我在下面添加这个答案来帮助其他最终来到这里的人。
解决方案 #1 - 用于开发环境。
使用其他答案中提到的 NPM 支持团队提出的解决方案有效......
# Reproduces the old behavior of hard copies and not symlinks
npm install $(npm pack <folder> | tail -1)
这在手动安装的开发环境中很好。
解决方案 #2 - 用于构建环境。
然而,在我们的例子中,开发环境并不那么重要,因为当我们将更改提交到 Git 时,该./node_modules/
文件夹无论如何都会被忽略。
这些文件是重要的,并被带到我们的构建环境中./package.json
。./package-lock.json
在我们的构建环境(我们的自动化 CI/CD 管道的一部分)中,自动化只是运行npm install
命令并从文件中列出的依赖项构建package.json
。
所以,这就是问题影响我们的地方。package.json
导致符号链接出现的依赖项列表中的本地引用文件。现在我们回到老问题。然后,这些符号链接会被带到构建的输出中,然后转移到舞台和生产环境中。
我们所做的是rsync
在存档模式下使用--copy-links
将符号链接转换为原始副本的选项。
以下是该命令在自动构建中的样子:
# Install dependencies based on ./package.json
npm install
# Make a copy that changes symlinks to hard copies
rsync --archive --verbose --copy-links ./node_modules/ ./node_modules_cp/
# Remove and replace
rm -r ./node_modules/
mv ./node_modules_cp/ ./node_modules/