【问题标题】:Webpack UglifyJS running into unexpected tokenWebpack UglifyJS 遇到意外令牌
【发布时间】:2018-01-01 10:51:40
【问题描述】:

我正在尝试建立一个开发样板,它也可以轻松地将 Vue.js 项目推送到 NPM。

我的webpack.prod.js 文件遇到问题,错误是:

ERROR in build.js from UglifyJs
Unexpected token: operator (>)

要丑化的代码是:

// minify with dead-code elimination
new webpack.optimize.UglifyJsPlugin({
    compress: {
        warnings: false
    }
})

这是我的项目以及它似乎出错的确切文件:

https://github.com/stephan-v/vue-inline-svg/blob/master/webpack/webpack.prod.js

当我运行npm run production 时,该项目使用 Babel 转译为 ES6 和 Webpack 以编译为 UMD 格式。此命令使用webpack.prod.js 配置。

我可能没有看到可以轻松修复的东西,但我不知道这里出了什么问题。

【问题讨论】:

  • 好像可以加载文件,是404的html
  • 没有UglifyJsPlugin 一切正常。我实际上并没有通过导入 UMD 文件来测试它,但它在没有插件的情况下编译得很好,所以这不是问题。
  • 我从vue.jswebpack-simple 存储库中添加了完全相同的.babelrc 文件,现在它工作得很好。不过我会看看它到底做了什么。

标签: javascript webpack vue.js vuejs2 webpack-2


【解决方案1】:

使用来自webpack simple 存储库的.babelrc 文件解决了我的问题。我不确定这里发生了什么:

{
    "presets": [
        ["env", { "modules": false }]
    ]
}

据我所知,.babelrc 包含告诉 babel 如何转译我的代码的插件和选项。

我修改了 modules 选项的确切含义:

https://babeljs.io/docs/plugins/preset-env/#optionsmodules

上面写着:

“AMD” | “嗯” | “系统” | “普通” |假,默认为 “commonjs”。

启用将 ES6 模块语法转换为另一种模块类型。

将此设置为 false 不会转换模块。

因为我希望我的包可供所有用户使用,而我的 webpack 生产配置使用:

libraryTarget: 'umd'

要将我的代码编译为umd 格式,这不会与"modules": false 冲突吗?

我也习惯在.babelrc 文件中看到es2015 预设。这是无处可寻的。这是现在的默认设置吗?

es2015 选项似乎已被完全删除:

https://github.com/vuejs-templates/webpack/commit/424cd3f6d101ffeb57f48bca55d7951b35af60e0

从我目前所读的内容来看,这是因为 Webpack 2 已经知道如何在本机上使用 ES6 模块,因此 "modules": false 也禁用并阻止了 babel 转译。

请随时发表评论并纠正我的任何问题。我将其保存以供将来参考,并供其他人查看谁也可能偶然发现此内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2020-08-19
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多