Webpack/Babel-loader引入JS文件在iOS9(iPad)中失效问题求助
问题:Cordova+Vue.js+Webpack构建的应用在iOS 9.3.5设备上导入JS文件后抛出SyntaxError
我正在用Webpack构建一款Cordova/Vue.js应用,相关配置和遇到的问题如下:
开发依赖(package.json)
"devDependencies": { "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-polyfill": "^6.26.0", "babel-preset-env": "^1.7.0" // 其他依赖省略 }
Webpack配置(webpack.config.js)
const CONFIG = { entry: { app: ["babel-polyfill", path.join(PATHS.SRC_JS, 'app.js')], }, output: { path: PATHS.DIST, filename: './js/[name].js' }, module: { rules: [ { test: /\.js$/, exclude: /node_modules\/(?!(swiper)\/).*/, use: [ { loader: 'eslint-loader', options: { emitWarning: true, noConsole: 0 } }, { loader: 'babel-loader', options: { presets: ['env'] } } ] }, // .VUE 文件处理 { test: /\.vue$/, loader: 'vue-loader' } ] }, }; module.exports = CONFIG;
问题现象
- 当
app.js中仅包含以下代码时:
console.log('app.js') import style from '../css/sass/main.scss'; import config from '../assets/config.json';
执行Webpack和Cordova编译后,在iPad mini(iOS 9.3.5)上可正常运行,控制台能输出app.js。
- 但添加任意JS文件的导入语句后,比如:
import style from '../css/sass/main.scss'; import Preloader from './components/preloader-component.js'; import config from '../assets/config.json';
iPad的控制台就会报错:
SyntaxError : Unexpected token ')' in app.js:1
注意:在Xcode的iOS模拟器中构建应用可以正常运行,仅在iOS 9.3.5的实体iPad上出现该问题。
已解决!
最终定位到问题是Babel未正确转译ES6代码,导致iOS 9.3.5的Safari无法解析。解决方法很简单:把Webpack配置中的Babel配置项移到单独的.babelrc文件中即可!
如果有其他开发者遇到相同的问题,可以参考这个解决方案。
内容的提问来源于stack exchange,提问作者David Anquetin
相关产品推荐
相关产品推荐

