當前位置: 首頁>>技術教程>>正文


沒有符號鏈接的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/zh-tw/article/7776.html,未經允許,請勿轉載。