我设置了一个以Windows 8和Ubuntu作为虚拟机的开发环境。为此,我使用VirtualBox。
我还设法在VirtualBox中创建一个共享文件夹。
在这个共享文件夹中,我尝试使用Yeoman的ember-generator启动一个项目。
yo ember --skip-install --karma
npm install --no-bin-links
对于安装模块NPM,我使用选项“--no-bin-links”不创建符号链接。不幸的是,我仍然有错误创作符号链接...我使用虽然这个选项?他有错误吗?
答案 0 :(得分:35)
NPM docs about参数" - no-bin-links"说:
将阻止npm为包的任何二进制文件创建符号链接 可能包含。
这只会导致NPM无法在node_modules/.bin
文件夹中创建链接。我还搜索了一种方法来阻止NPM在使用npm install ../myPackage
时创建符号链接,但无法找到任何解决方案......
更新: npm支持团队表示这将重现旧行为(无符号链接):
npm install $(npm pack <folder> | tail -1)
在Windows 10上的git-bash中为我工作。
答案 1 :(得分:2)
我有类似的环境。显然,重命名或移动文件时虚拟机(vagrant)同步存在问题,这在更新模块时会发生。如果你在命令行上执行文件列表(ls -alhp)并看到???对于文件权限,则需要重新启动虚拟机。这会将权限设置为有效值。然后在安装模块时使用--no-bin-links选项。
答案 2 :(得分:2)
当尝试解决安装本地模块(即npm install ../myPackage
)并且不希望使用符号链接的问题时,此堆栈溢出页面会出现在Google搜索结果中。因此,我在下面添加了此答案,以帮助最终在这里找到其他人。
使用NPM支持团队提出的解决方案,如其他答案中所述...
# Reproduces the old behavior of hard copies and not symlinks
npm install $(npm pack <folder> | tail -1)
这在手动安装的开发环境中很好。
但是,在我们的情况下,开发环境并没有太大关系,因为在将更改提交到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/