如何使用Ember CLI跟踪Uglify错误

时间:2016-01-29 20:22:31

标签: ember.js ember-cli uglifyjs

当我在开发中构建我的Ember CLI应用程序时,它运行正常。当我尝试将其构建用于制作时,Uglify感到不安:

$ ember build --environment=production
version: 1.13.15
Build failed.
File: assets/vendor.js (70503:3)
Unexpected token name «use», expected punc «,»
Error
    at new JS_Parse_Error (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:1508:18)
    at js_error (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:1516:11)
    at croak (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2008:9)
    at token_error (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2016:9)
    at expect_token (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2029:9)
    at expect (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2032:36)
    at expr_list (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2535:44)
    at subscripts (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2674:30)
    at subscripts (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2651:20)
    at expr_atom (eval at <anonymous> (/Users/michael/Code/queue/node_modules/broccoli-uglify-sourcemap/node_modules/uglify-js/tools/node.js:24:4), <anonymous>:2527:20)

我对此错误的含义感到茫然 - Unexpected token name «use», expected punc «,» - assets/vendor.js (70503:3)不是我可以在任何地方找到的文件。

如果有人能给我一个如何追踪这个错误的建议,我真的很感激!

2 个答案:

答案 0 :(得分:2)

我对这个话题进行了一些研究,因为我也遭遇了“类似的东西”。

在我的ember项目中,我使用ember-browserify来完成将NPM脚本复制到vendor.js

的工作

事实证明ember-browserify在执行此复制时不会转换ES5 / ES6脚本,而uglify-js(插件崩溃)不支持ES语法。

您可以看到此问题:https://github.com/ef4/ember-browserify/issues/97https://github.com/mishoo/UglifyJS2/issues/448

以下是我解决问题的方法(非常简单)

在终端上: npm install --save-dev ember-browserify babelify babel-preset-es2015

environment.js

browserify: {
  extensions: ['.js'],
  transform: [
    ['babelify', { presets: ["es2015"]}]
  ]
},

现在,当您运行ember build --environment=production时,它不会抛出语法错误。

顺便说一句,我在这个奇怪的问题上采取的一种有用的方法是在命令行上全局安装uglifyjs并手动运行,直到找到合理的行号来发现问题(let vs var)。

请记住,ember构建只能在node_modules中实际安装的内容上运行。在调试此问题时,一个问题是在进行一些试验/错误测试时安装了不同的版本。

答案 1 :(得分:1)

正在运行ember init并替换bower.jsonpackage.json会导致错误消失。