Webpack打包Node脚本运行报错:Cannot find module 'node:process'
webpack打包Node脚本报错Cannot find module 'node:process' 解决方案
报错Error: Cannot find module 'node:process'的核心原因是当前运行打包后文件的Node.js版本不支持node:前缀的核心模块引入语法,该语法是Node.js v14.18.0、v16.0.0及以上版本才正式支持的,低于该版本运行时就会把node:process识别为第三方包而非内置模块,从而抛出找不到模块的错误。
可根据实际场景选择以下方案解决:
- 方案1:升级Node.js版本
直接将运行环境的Node.js升级到v14.18.0以上的稳定版本,优先选择长期支持的v18.x、v20.x LTS版本,即可原生支持node:前缀语法,无需修改任何配置。 - 方案2:修改webpack配置,替换
node:前缀
如果无法升级Node版本,可以在webpack配置中增加别名替换规则,将所有带node:前缀的内置模块引用替换为不带前缀的写法:
如果存在多个export default { // 原有配置保持不变,新增resolve配置 resolve: { alias: { 'node:process': 'process' } } }node:前缀的模块(如node:fs、node:path等)都报错,可以使用NormalModuleReplacementPlugin做批量替换:import { NormalModuleReplacementPlugin } from 'webpack'; export default { // 原有配置保持不变,新增plugins配置 plugins: [ new NormalModuleReplacementPlugin(/^node:(.*)$/, (resource) => { resource.request = resource.request.replace(/^node:/, ''); }) ] } - 方案3:将Node内置模块标记为外部依赖
Node环境本身已内置process、fs等核心模块,不需要webpack打包进产物,可以通过externals配置将这类模块标记为外部依赖,webpack会保留原有的模块引用逻辑,不做打包处理:export default { // 原有配置保持不变,新增externals配置 externals: ({request}, callback) => { if (/^node:/.test(request)) { return callback(null, request.replace(/^node:/, 'commonjs ')); } callback(); } }
内容的提问来源于stack exchange,提问作者Martin Pierret
相关产品推荐
相关产品推荐

