当前位置: 首页>>技术教程>>正文


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

, , , ,

问题描述

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

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

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

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

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

最佳办法

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

will prevent npm from creating symlinks for any binaries the package might contain.

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

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

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

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

次佳办法

尝试解决安装本地模块(即npm install ../myPackage)而不需要符号链接的问题时,Google搜索结果中会显示此Stack Overflow页面。因此,我在下面添加此答案,以帮助那些最终在这里遇到的人。

解决方案#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/

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7776.html,未经允许,请勿转载。