执行nx serve命令时Nx Express的webpack构建失败
Node.js 18 + Nx Express 启动报错解决办法
机器运行Node.js 18.16.0,配置了包含React的新Nx工作区后添加Express,React应用构建运行正常,但启动Express时出现以下错误:
Error: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' at new NodeError (node:internal/errors:399:5) at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11) at defaultResolve (node:internal/modules/esm/resolve:1135:3) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:838:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ESMLoader.import (node:internal/modules/esm/loader:525:22) at importModuleDynamically (node:internal/modules/cjs/loader:1186:29) at importModuleDynamicallyWrapper (node:internal/vm/module:429:21) at importModuleDynamically (node:internal/vm:106:46)
以下是几个可行的解决方向:
- 调整package.json模块类型:检查Express项目的
package.json,如果设置了"type": "module",改成"commonjs";如果需要保留ESM格式,确保所有绝对路径导入都加上file://前缀(Windows系统下注意路径格式转换)。 - 修改Webpack输出配置:在Express项目的
webpack.config.js中,添加output.libraryTarget配置为'commonjs2',让打包产物符合Node.js CommonJS规范:module.exports = { // 其他已有配置 output: { libraryTarget: 'commonjs2', filename: '[name].js' } }; - 更新Nx启动参数:在项目的
project.json里,给Express的serve命令添加runtime参数,指定ESM加载器:{ "targets": { "serve": { "executor": "@nx/express:node", "options": { "buildTarget": "your-express-app:build", "runtimeArgs": ["--loader", "ts-node/esm"] } } } } - 降级Nx依赖版本:当前使用的@nx/express@16.1.4、@nx/webpack@16.1.4存在ESM兼容bug,可尝试降级到16.0.x版本,执行命令:
npm install @nx/express@16.0.0 @nx/webpack@16.0.0 --save-dev
内容的提问来源于stack exchange,提问作者Chief
相关产品推荐
相关产品推荐

