我正在制作控制台实用程序,它接受配置文件的路径作为控制台参数。Wepback需要变量
F.e:实用-f /path/to/file.js
我需要导入该文件读取配置。有没有可能用webpack处理这个问题?据我了解,在这种情况下上下文不能帮助我。
谢谢。
P.S.我已经在使用webpack了。
P.S解决方案是使用这样的:的eval(“需要”)(dynamicPath)
我正在制作控制台实用程序,它接受配置文件的路径作为控制台参数。Wepback需要变量
F.e:实用-f /path/to/file.js
我需要导入该文件读取配置。有没有可能用webpack处理这个问题?据我了解,在这种情况下上下文不能帮助我。
谢谢。
P.S.我已经在使用webpack了。
P.S解决方案是使用这样的:的eval(“需要”)(dynamicPath)
的WebPack只能做一个动态需要这样如果要需要的文件都可以在编译时。例如,如果你需要再下罩“动态”的文件路径,像
require('./assets/images/' + someVariable + '.png')
,将的WebPack包括所有图像匹配捆绑需要的代码模式。它基本上包括匹配正则表达式中的所有文件:
/.\/assets\/images\/*.png/
我可能会尝试将配置文件中的特定文件夹,并使用该文件夹的要求:
require('./configs/' + process.env.CONFIG_NAME);
这样的WebPack将只包括configs
文件夹中的所有文件。
该Webpack文档是可怕但有更多的信息on the dynamic requires page。
如果您将配置文件作为参数传递给节点进程,则可以通过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 */
我不认为你需要的WebPack只为这 - 你应该可以要求它,你访问后'process.argv' – Barnabus
我已经使用webpack在这个项目中。我只需要配置文件。 – zim32
好的 - 我会在下面的答案中加入更全面的解释:) – Barnabus