2017-01-02 101 views
-1

我正在製作控制檯實用程序,它接受配置文件的路徑作爲控制檯參數。Wepback需要變量

F.e:實用-f /path/to/file.js

我需要導入該文件讀取配置。有沒有可能用webpack處理這個問題?據我瞭解,在這種情況下上下文不能幫助我。

謝謝。

P.S.我已經在使用webpack了。

P.S解決方案是使用這樣的:的eval(「需要」)(dynamicPath)

+0

我不認爲你需要的WebPack只爲這 - 你應該可以要求它,你訪問後'process.argv' – Barnabus

+0

我已經使用webpack在這個項目中。我只需要配置文件。 – zim32

+0

好的 - 我會在下面的答案中加入更全面的解釋:) – Barnabus

回答

0

的WebPack只能做一個動態需要這樣如果要需要的文件都可以在編譯時。例如,如果你需要再下罩「動態」的文件路徑,像

require('./assets/images/' + someVariable + '.png') 

,將的WebPack包括所有圖像匹配捆綁需要的代碼模式。它基本上包括匹配正則表達式中的所有文件:

/.\/assets\/images\/*.png/ 

我可能會嘗試將配置文件中的特定文件夾,並使用該文件夾的要求:

require('./configs/' + process.env.CONFIG_NAME); 

這樣的WebPack將只包括configs文件夾中的所有文件。

該Webpack文檔是可怕但有更多的信息on the dynamic requires page

+0

啊..我甚至試圖讓類似 let load = require; load(dynamicPath); 但它很聰明) – zim32

+0

這有助於:eval('require')(dynamicPath) – zim32

0

如果您將配置文件作爲參數傳遞給節點進程,則可以通過process.argv命令行參數數組訪問它。我不知道您是否正在使用其他框架(如優秀的commander)來幫助製作命令行程序,但我們可以對該陣列進行切片以找到我們需要的內容。

要從腳本的啓動目錄中解析路徑,可以使用process.cwd() - 這將返回節點進程工作目錄的絕對路徑。

最後,您可以使用path.resolve(processPath, configPath)docs)生成始終保證解析到配置的路徑。然後你可以要求這條路。

您可能需要先執行此操作。你的文件的頂部可能是這個樣子:

/* relevant require() calls for necessary modules */ 
var path = require('path'); 

// first two arguments are node process and executed file 
var args = process.argv.slice(2); 

var configIndex = args.findIndex('-f') + 1; 
var configPath = path.resolve(process.cwd(), args[configIndex]); 

var config = require(configPath); 

/* the rest of your code */ 
+0

我不認爲這與問題有關,該問題涉及在webpack包中構建動態文件路徑 –

+0

問題涉及到製作一個將配置文件路徑作爲參數的控制檯實用程序,以及如何在您的代碼中要求這一點 - 或者對我而言似乎如此。當然,這取決於實用程序在做什麼,以及配置的用途。 – Barnabus

+0

是的,問題更多的是用webpack編寫require(filePath)的方法。它總是試圖解決這個問題,這將導致上下文。 – zim32