我正在制作控制台实用程序,它接受配置文件的路径作为控制台参数。
F.e:utility -f /path/to/file.js
我需要这个文件来读取配置。是否可以使用webpack处理此问题?据我所知,在这种情况下,情境无法帮助我。
感谢。
P.S。我已经在使用webpack了。
P.S解决方案是使用类似:eval('require')(dynamicPath)
答案 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 */