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

Bas*_*n D 24 ubuntu node.js npm ember.js yeoman-generator

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

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

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

yo ember --skip-install --karma
npm install --no-bin-links
Run Code Online (Sandbox Code Playgroud)

对于安装模块NPM,我使用选项"--no-bin-links"不创建符号链接.不幸的是,我仍然有错误创作符号链接...我使用虽然这个选项?他有错误吗?

Tek*_*mmy 37

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

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

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

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

npm install $(npm pack <folder> | tail -1)
Run Code Online (Sandbox Code Playgroud)

适用于Windows 10上的git-bash.

  • 知道如何在package.json文件中完成上述操作吗? (4认同)

Jos*_*hih 12

当尝试解决安装本地模块(即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)
Run Code Online (Sandbox Code Playgroud)

这在手动安装的开发环境中很好。

解决方案#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/
Run Code Online (Sandbox Code Playgroud)

  • 如何使用第一个解决方案?&lt;文件夹&gt;是什么? (3认同)