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;
我在 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;