Pump 3.0.1报Unexpected token {语法错误,求非升级解决方案
问题描述
2024年9月10日太平洋标准时间约10:30,执行ng build命令时突然抛出如下语法错误。已知当前使用的是旧版本框架,虽清楚可能需要升级至最新版本,但希望获得其他可行解决方案。
错误日志
Unexpected token { /Users/MattWh@vsp.com/git/provider-fee-ui/node_modules/pump/index.js:7 } catch {} ^ SyntaxError: Unexpected token { at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:599:28) at Object.Module._extensions..js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module.js:497:12) at Function.Module._load (module.js:489:3) at Module.require (module.js:579:17) at require (internal/module.js:11:18) at Object.<anonymous> (/Users/MattWh@vsp.com/git/provider-fee-ui/node_modules/mississippi/index.js:1:85) at Module._compile (module.js:635:30) at Object.Module._extensions..js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module.js:497:12) at Function.Module._load (module.js:489:3) at Module.require (module.js:579:17)
环境信息
Angular CLI版本信息
_ _ ____ _ ___ / \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _| / △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | | / ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | | /_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___| |___/ Angular CLI: 7.0.7 Node: 8.9.0 OS: darwin x64 Angular: 7.2.16 ... animations, common, compiler, compiler-cli, core, forms ... http, language-service, platform-browser ... platform-browser-dynamic, router Package Version ----------------------------------------------------------- @angular-devkit/architect 0.13.10 @angular-devkit/build-angular 0.13.10 @angular-devkit/build-optimizer 0.13.10 @angular-devkit/build-webpack 0.13.10 @angular-devkit/core 7.3.10 @angular-devkit/schematics 7.0.7 @angular/cdk 7.3.7 @angular/cli 7.0.7 @angular/flex-layout 7.0.0-beta.24 @angular/material 7.3.7 @ngtools/webpack 7.3.10 @schematics/angular 7.0.7 @schematics/update 0.10.7 rxjs 5.6.0-forward-compat.5 typescript 3.1.8 webpack 4.29.0
Node与npm版本
node -v v8.9.0 npm -v 5.5.1
解决方案
1. 锁定pump包的兼容版本
错误根源是pump包新版本使用了无参数catch语法(catch {}),而Node.js 8.x不支持该ES2019特性。在package.json中添加resolutions字段,强制安装兼容Node.js 8的版本:
{ "resolutions": { "pump": "^3.0.0" } }
添加后执行:
rm -rf node_modules package-lock.json npm install
2. 锁定mississippi的兼容版本
mississippi依赖的pump版本过高,可直接安装依赖低版本pump的mississippi版本:
npm install mississippi@^3.0.0 --save-exact
3. 用Babel转译不兼容的依赖包
配置Webpack转译pump和mississippi,让语法兼容Node.js 8:
- 项目根目录创建
webpack.config.js:
const path = require('path'); module.exports = { module: { rules: [ { test: /\.js$/, include: [ path.resolve(__dirname, 'node_modules/pump'), path.resolve(__dirname, 'node_modules/mississippi') ], use: { loader: 'babel-loader', options: { presets: [['@babel/preset-env', { targets: { node: '8.9.0' } }]] } } } ] } };
- 安装Babel依赖:
npm install babel-loader @babel/core @babel/preset-env --save-dev
- 修改
angular.json引入自定义配置:
{ "projects": { "your-project-name": { "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "customWebpackConfig": { "path": "./webpack.config.js" } } } } } } }
4. 临时升级Node.js版本
Node.js 10.x及以上支持无参数catch语法,若允许临时升级,直接升级到Node.js 10.x+即可解决问题。
内容的提问来源于stack exchange,提问作者user2051552
相关产品推荐
相关产品推荐

