2015-03-18 90 views
0

npm在當前目錄中查找node_modules,然後查找其所有父目錄,然後查找全局位置。我現在提出的目錄結構爲:告訴npm在不同目錄中查找node_modules

  • 全球
    • 的package.json
    • node_modules/
  • 項目1
    • gulpfile.coffee
  • 項目 - 2
    • gulpfile.coffee

但是,這不是在那裏npm通常查找此。有沒有可以設置的環境變量來處理這個問題,或者我可以告訴它看起來在特定的目錄中?謝謝!

+0

爲什麼你不把你的項目移動到'global'子文件夾? – elmigranto 2015-03-18 21:05:42

+0

爲了進一步解釋,這裏面是一個WordPress項目,所以我使用典型的「主題/項目-1」,「主題/項目-2」方法加載這些內容,並希望保留所有依賴項(我也會把這些組件放進去)放​​在一箇中心位置。 – Zach 2015-03-18 21:09:30

回答

0

您可以設置一個NODE_PATH環境變量。

+0

謝謝!我確實遇到過這種情況,但不知道如何在我的大文件中設置它。我看到[gulp-preprocess](https://www.npmjs.com/package/gulp-preprocess),但認爲這是有點矯枉過正的增加到每個任務,因爲我想全局設置它。 – Zach 2015-03-18 21:08:25

1

請嘗試以下操作在gulp中設置NODE_PATH。

.pipe(preprocess({context: { NODE_PATH: '$NODE_PATH:/path/to/other/dir'}})) 

完整的示例如下所示。

var preprocess = require('gulp-preprocess'); 

gulp.task('html', function() { 
    gulp.src('./app/*.html') 
    .pipe(preprocess({context: { NODE_PATH: '$NODE_PATH:/path/to/other/dir'}})) //To set environment variables in-line 
    .pipe(gulp.dest('./dist/')) 
}); 

上述2個示例添加到節點路徑中(如果已設置)。如果您想設置它,請執行以下操作。

.pipe(preprocess({context: { NODE_PATH: '/path/to/other/dir'}})) 
+0

謝謝傑夫!有沒有辦法做到這一點,而不必在每個吞嚥任務內使用預處理?我遇到的問題是從'project-1'運行'gulp'時,它沒有找到吞噬的路徑,所以它仍然出錯。 – Zach 2015-03-18 22:40:56

+0

我不這麼認爲......你的意思是沒有發現「吞噬」? – 2015-03-19 12:29:19

+0

如果我嘗試在一個gulp任務中設置'NODE_PATH',NPM仍然不會知道'gulp'是什麼,因爲存儲的gulp位於NPM尋找'node_modules'的正常範圍之外,因此推理試圖在gulp甚至運行之前將其初始設置爲依賴文件。 – Zach 2015-03-19 13:49:59

相關問題