没有符号链接的npm安装不起作用

问题描述 投票:23回答:4

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

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

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

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

对于安装模块NPM,我使用选项“ --no-bin-links”不创建符号链接。不幸的是,我仍然有错误创建符号链接。那里他有个虫子?

node.js ubuntu ember.js npm yeoman-generator
4个回答
37
投票

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

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

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

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

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

[适用于我,在Windows 10上的git-bash中]


4
投票

当尝试解决安装本地模块(即npm install ../myPackage)且不希望使用符号链接的问题时,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/

2
投票

我有类似的环境。显然,重命名或移动文件时,virtualbox(无用)同步有问题,这在更新模块时会发生。如果在命令行上执行文件列表(ls -alhp)并查看???文件权限,是时候重新启动您的virtualbox了。这会将权限设置为有效值。然后在安装模块时使用--no-bin-links选项。


0
投票

我同意可能会有一些无所事事(Homestead Laravel),Windows托管虚拟机问题,但是总的来说,npm是我遇到过的最差的软件包管理器。严重无济于事,冲突无止境。这是浪费时间,您最好自己动手做一棵树,然后逐个安装每个软件包。

仅是我的2美分。欢迎来到意大利面条代码王国。

© www.soinside.com 2019 - 2024. All rights reserved.