Wepback需要变量

时间:2017-01-02 19:54:46

标签: javascript webpack

我正在制作控制台实用程序,它接受配置文件的路径作为控制台参数。

F.e:utility -f /path/to/file.js

我需要这个文件来读取配置。是否可以使用webpack处理此问题?据我所知,在这种情况下,情境无法帮助我。

感谢。

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

P.S解决方案是使用类似:eval('require')(dynamicPath)

2 个答案:

答案 0 :(得分:0)

如果要求的文件在编译时可用,Webpack只能执行这样的动态需求。例如,如果您需要"动态"文件路径,如

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

然后,Webpack将包含与捆绑的需求代码中的模式匹配的所有图像。它基本上将包括与正则表达式匹配的所有文件:

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

我可能会尝试将配置文件放在特定文件夹中,并在该文件夹上使用require:

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

这样Webpack只会包含configs文件夹中的所有文件。

Webpack文档可怕,但有更多信息on the dynamic requires page

答案 1 :(得分: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 */