2015-05-04 104 views
3

我有一個項目的設置是共享的node_modules目錄如下:是否有可能有項目

workspace 
└cache 
    └node_modules 
    └gulp (and gulp-plugins, express etc.) 
└nodejs 
    └node.exe 
└project1 
    └gulpfile.js 
└project2 
    └gulpfile.js 

現在我想執行的項目目錄的gulpfile:

set NODE_PATH='C:\workspace\cache\node_modules\' 
cd C:\workspace\project1\ 
C:\workspace\nodejs\node.exe C:\workspace\cache\node_modules\gulp\bin\gulp.js watch 

我得到以下輸出:

[12:06:04] Local gulp not found in C:\workspace\project1 
[12:06:04] Try running: npm install gulp 

在這兩個項目文件夾中,gulp文件是相似的,並使用simi一組插件。我真的很想只有一次依賴(因爲可能有多達25個項目共享相同的node_modules)。 這是可能的設置,還是單獨的項目目錄需要有自己的node_modules文件夾?

回答

5

Gulp要求您同時擁有全局安裝和本地安裝。所以你需要讓你的Gulp相對於你的Gulp文件。如果你的package.json將位於workspace和你的node_modules將在workspace/node_modules因爲節點的搜索樹,一切都會正常工作,但如果你不能移動它們,唯一的方法就是「僞造」node_modules文件夾。

您可以通過創建符號鏈接來完成此操作。

這裏是在Unix/Linux/Mac的:

ln -s ../cache/node_modules node_modules 

下面是在Windows

mklink /D node_modules ../cache/node_modules 

(後者可能工作不同,我不是一個雙贏的機器上)

+0

其實你不需要在全局安裝gulp,你只需要命令行工具。我使用的命令(具有node.exe和gulp.js的完整路徑)是爲了防止必須使用全局安裝的gulp。 此方法在Windows上使用以下createlink命令: 'mklink/J node_modules .. \ SFBC \ node_modules' For the record;因爲我自己沒有想到這件事,所以我把頭撞在桌子上。從Linux/Mac環境來我不使用相同的方法適用於Windows。 – tuvokki

-1

您可以在npm install'package-name'中始終使用'-g'參數,以便使模塊全局可用以跨不同項目訪問。

請參見以下鏈接

  1. what does the "-g" flag do in the command "npm install -g <something>"?
  2. How do I install a module globally using npm?
  3. https://docs.npmjs.com/files/folders

包被丟棄爲前綴下node_modules文件夾。在本地安裝時,這意味着您可以要求(「packagename」)加載其主模塊,或者要求(「packagename/lib/path/to/sub/module」)加載其他模塊。

在Unix系統上的全局安裝轉到{prefix}/lib/node_modules。 全球在Windows上安裝到{PREFIX}/node_modules(即沒有0​​lib文件夾。)

作用域包安裝方法相同,只是它們在相關node_modules文件夾的子文件夾分組 在一起該範圍的 名稱由@符號前綴,例如npm install @ myorg/package會將程序包置於 {prefix}/node_modules/@ myorg/package中。

+1

咕嘟咕嘟需要本地和全球安裝。這是他們工具製作過程的一部分。 – ddprrt

+0

感謝您的聯繫。也許我必須更加明確地表明,我不在這裏使用全局安裝的吞吐,而只是在本地使用。這就是問題中命令中完整路徑名稱的共鳴。 – tuvokki

相關問題