未找到节点模块 CLI

问题描述 投票:0回答:1

我一直在编写自己的 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')"

它毫无问题地找到它。

node.js macos npm command-line-interface
1个回答
0
投票

找到解决方案了。

我尝试访问包中的模块,而不是访问它正在使用的目录。使用 path.join() 和 process.cwd() 进行简单修复

© www.soinside.com 2019 - 2024. All rights reserved.