問題描述
我使用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/