问题描述:
目前在使用nodeJs
开发一个CLI
工具,程序发布到npm
(私服)上后,需要允许读取用户自定义配置js文件。此时如何在程序中加载这个.js
文件呢?
例如wepack-cli如何加载用户webpack.config.js的?
看了看webpack-cli的源码
const requireConfig = function requireConfig(configPath) {
let options = (function WEBPACK_OPTIONS() {
if (argv.configRegister && argv.configRegister.length) {
module.paths.unshift(path.resolve(process.cwd(), "node_modules"), process.cwd());
argv.configRegister.forEach(dep => {
require(dep);
});
return require(path.resolve(process.cwd(), configPath));
} else {
return require(path.resolve(process.cwd(), configPath));
}
})();
options = prepareOptions(options, argv);
return options;
};
尝试过类似的的方法:
require(path.resolve(process.cwd() , 'some.config.js'));
// Cannot find module 'E:codeFolder\some.config.js'
貌似nodeJs
的requireJs
不能使用这种超出当前根目录(codeFolder)的绝对路径去加载.
下半年沉迷造命令行轮子,还是亲自来回答这个吧~
方法1: path.resovle()
熟悉
node.js
的同学应该知道path
路径模块。该模块有个方法path.resolve(pathName)
。该方法,官方文档解释:该方法将路径或路径片段的序列解析为绝对路径。给定的路径序列从右到左进行处理,每个后续的
path
前置,直到构造出一个绝对路径。如果在处理完所有给定的path
片段之后还未生成绝对路径,则再加上当前工作目录。换句话说,如果调用
path.resolve('webpack.config.js')
,它会自动添加当前工作目录,返回一个完整的路径,如:E:\code\my-pr.config.js
。此webpack-cli
都能拿到webpack.config.js
的完整路径。方法2: path.cwd()
与方法一的思路类型,
path.cwd()
会返回当前js进程的工作目录,同样可以拿到用户项目根文件夹的完整绝对路径。调用如下:path.join(path.cwd(), 'webpack.config.js')