2017-01-02 78 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