33

我设置了一个使用 Windows 8 和 Ubuntu 作为虚拟机的开发环境。为此,我使用 VirtualBox。

我还设法在 VirtualBox 中创建了一个共享文件夹。

在这个共享文件夹中,我尝试使用 Yeoman 的 ember-generator 启动一个项目。

yo ember --skip-install --karma
npm install --no-bin-links

为了安装 NPM 模块,我使用“--no-bin-links”选项来不创建符号链接。不幸的是,我仍然有错误创建符号链接......虽然这个选项我使用的是什么?他有错误吗?

4

3 回答 3

50

关于参数“--no-bin-links”的NPM 文档说:

将阻止 npm 为包可能包含的任何二进制文件创建符号链接。

这只会导致 NPM 不在node_modules/.bin文件夹中创建链接。我还搜索了一种方法来防止 NPM 在使用时创建符号链接npm install ../myPackage,但找不到任何解决方案......

更新: npm 支持团队表示这将重现旧行为(无符号链接):

npm install $(npm pack <folder> | tail -1)

在 Windows 10 上的 git-bash 中为我工作。

于 2017-07-10T15:47:59.847 回答
15

当尝试解决安装本地模块(即 . 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/
于 2019-02-08T08:16:24.753 回答
3

我也有类似的环境。显然,Virtualbox ( vagrant ) 同步在重命名或移动文件时会出现问题,这在更新模块时会发生。

如果您ls -alhp在命令行上执行文件列表 ( ) 并查看???文件权限,那么是时候重新启动您的虚拟机了。这会将权限设置为有效值。然后--no-bin-links在安装模块时使用该选项。

于 2014-06-08T21:19:19.427 回答