npm install without symlinks 选项不起作用

Posted

技术标签:

【中文标题】npm install without symlinks 选项不起作用【英文标题】:npm install without symlinks option not working 【发布时间】:2014-02-20 22:55:06 【问题描述】:

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

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

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

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

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

【问题讨论】:

您是从 Windows 命令提示符还是从 bash 提示符运行 npm? 对我来说听起来像是错误报告而不是问题。 @Bastien 你在这方面有什么进一步的进展吗? 不,我改变了我的解决方案。我不使用共享文件夹。 看看npmjs.com/package/install-local 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

【讨论】:

知道如何在 package.json 文件中完成上述操作吗? @Vishal,请参阅我的解决方案,以在从 package.json 构建后删除符号链接:***.com/a/54588310/2598101 或者简单地在powershell中使用这个命令npm install (npm pack &lt;folder&gt;) 当 NPM 尝试安装已编译的包时,我得到以下信息:Cannot convert undefined or null to object.【参考方案3】:

当试图解决安装本地模块(即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 的依赖项列表中本地引用的文件会导致出现符号链接。现在我们回到老问题。然后,这些符号链接会被带到构建的输出中,然后转移到 Stage 和 Production 环境中。

我们所做的是在存档模式下使用 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/

【讨论】:

第一种方案怎么用? 是什么? &lt;folder&gt; 是本地包文件夹

以上是关于npm install without symlinks 选项不起作用的主要内容,如果未能解决你的问题,请参考以下文章

How to Install office 365 Plus without ODT

[Yarn] Use Yarn dlx to Execute Packages without Installing Them

appium===报错Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without

Install Emmet &Theme For Sublime Text 3 Without Package control

appium 运行报错:...... Attempt to re-install io.appium.settings without first uninstalling解决方案

HPC install software on python virtual environment without root right and use X graph (windows) to d