【发布时间】:2019-03-07 23:37:01
【问题描述】:
我们有一个 vue-cli 3 项目。它工作得很好,编译没有问题。
事实上,我们必须支持只支持 ES5 代码的旧浏览器。
在项目中我们集成了一些用 ES6 编写的外部库(reconnecting-websocket 就是一个例子)。
问题
用这些externals编译我们的项目后,vue-cli生成的代码就有ES6代码了。
例如我们的chunk-vendors.js 有这个代码:
/*!
* Reconnecting WebSocket
* by Pedro Ladaria <pedro.ladaria@gmail.com>
* https://github.com/pladaria/reconnecting-websocket
* License MIT
*/const o=()=>{if("undefined"!==typeof WebSocket)return
WebSocket},a=t=>"function"===typeof t&&
带有 ES6 粗箭头函数 const o=()=>{。因此,在旧浏览器中运行此代码会中断。
这是我们的 .browserlistrc 文件,因为它似乎是在 Vue CLI 3 中添加浏览器支持的推荐方式:
> 1%
last 2 versions
not ie <= 8
Android >= 4
似乎 vue CLI 正确地转换了 ES5 中的应用程序代码。但它并没有对供应商进行另一次传递。
有什么方法可以使用 CLI v3 配置 vue 项目,以在构建后进行最终转译,以确保文件都与 ES5 兼容?
我们认为嵌入式 babel 和 webpack 会自动执行此操作,但似乎并非如此。
我们尝试在vue.config.js 中使用transpileDependencies 选项,但它并没有改变任何东西,而且供应商块中仍然存在粗箭头。
【问题讨论】:
-
在旧的 Vue 版本中,有这个
webpack.base.config.js,您在其中定义了 webpack 模块。所以有这个规则:test: /\.(js|vue)$/, include: [resolve('src'), resolve('test')],通常人们会把node_modules放在那里。但是这样转译变得超级慢。我很想知道它现在是如何工作的 :) -
github.com/vuejs/vue-loader/issues/1411 这个问题可能会解决您的问题。您需要将 babel 配置文件从
.babelrc更改为babel.config.js。 -
解决方案是什么?
-
还没有
标签: vue.js ecmascript-6 babeljs ecmascript-5 vue-cli-3