我一直在编写自己的 CLI 工具来自动捆绑我的 JS 项目,但是当尝试运行它时,它找不到配置,即使有一个配置。尝试在其他目录中运行它没有问题。
命令运行:
allpack
CLI 代码:
#!/usr/bin/env node
const commander = require("commander");
commander
.version("1.0.0", "-v, --version")
.usage("[OPTIONS]...")
.option("-m, --mode <value>", "Overwriting mode.")
.option("-c --config <value>", "Overwriting config file.")
.parse(process.argv);
const mode = commander.opts().mode;
const configPath = commander.opts().config || "./allpack.config.js";
const webpack = require("webpack");
const fs = require("fs-extra");
const path = require("path");
const config = require(configPath);
const ignoreList = config.ignore || [];
const buildBundle = (dir, outputDir, subdirName) => {
// Create a webpack configuration for the specific directory
const webpackConfig = {
mode: mode || config.mode || "development",
entry: path.join(dir, "index.js"),
output: {
path: path.resolve(outputDir),
filename: subdirName + ".bundle.js",
},
};
return new Promise((resolve, reject) => {
webpack(webpackConfig, (err, stats) => {
if (err) {
reject(err);
} else {
resolve(stats);
}
});
});
};
const main = async () => {
const pbSrcDir = config.src
? path.join(process.cwd(), config.src)
: path.join(process.cwd(), "pbSrc");
if (fs.existsSync(pbSrcDir)) {
if (fs.existsSync(config.outputDir)) {
fs.removeSync(config.outputDir);
fs.mkdirSync(config.outputDir);
} else {
fs.mkdirSync(config.outputDir);
}
const subdirs = fs.readdirSync(pbSrcDir);
for (const subdir of subdirs) {
console.log("Found:", subdir);
const subdirPath = path.join(pbSrcDir, subdir);
console.log(subdirPath);
if (
fs.lstatSync(subdirPath).isDirectory() &&
!ignoreList.includes(subdir)
) {
try {
await buildBundle(subdirPath, config.outputDir, subdir);
} catch (err) {
console.error("======Webpack Error======");
console.error(err);
console.error("==========Stats==========");
console.error("Directory:", pbSrcDir);
console.error("Output Directory:", config.outputDir);
console.error("Config:", JSON.stringify(config));
console.error("=========================");
}
}
}
} else {
console.error("======Allpack Error======");
console.error("Src directory not found.");
console.error("==========Stats==========");
console.error("Directory:", pbSrcDir);
console.error("Output Directory:", config.outputDir);
console.error("Config:", JSON.stringify(config));
console.error("=========================");
}
};
main().catch((err) => console.error(err));
它应该在路径中找到配置
allpack.config.js
跑步时
node -e "require('./allpack.config.js')"
它毫无问题地找到它。
找到解决方案了。
我尝试访问包中的模块,而不是访问它正在使用的目录。使用 path.join() 和 process.cwd() 进行简单修复