NextJS:__dirname 正在解析为 node_modules/

NextJS: __dirname is resolving to node_modules/

我在 NextJS 中使用一个库,它利用 __dirname 检查当前文件路径,但 __dirname 解析为 node_modules 而不是当前文件调用函数。

这是一个最小的例子:

// ./node_modules/check_api/lib/index.js
function checkCurrentFile(){
  if (!__dirname.endsWith("/api")) {
     throw new Error("Not api directory");
  }

  console.error("Invalid dir: ", __dirname);
}
// ./pages/api/[hello].ts
export default handler(req: NextApiRequest, res: NextApiResponse){
   checkCurrentFile();

   res.send("Hello");
}

可能导致:

Error: Invalid dir: ./node_modules/check_api/lib

我将 next.config.js 更新为:

module.exports = {
  reactStrictMode: true,
  webpack5: true,
  webpack: (config) => {
    config.resolve.fallback = { __dirname: false }
    return config;
  },
};

同时:

module.exports = {
  reactStrictMode: true,
  webpack5: true,
  webpack: (config) => {
    config.target = 'node';
    config.node = {
      ...config.node,
      __dirname: true, // and false
    };
    return config;
  },
};

仍然无法正常工作

我无法通过更改 next.config.js

来解决它

我结束了使用堆栈跟踪检查目录名称的错误。

const stackTrace = new Error().stack;