2016-10-27 64 views
8

我試圖在生產中構建一個應用程序應用程序,現在有兩週這個錯誤。在開發環境中構建它可以正常工作。我也意識到,在ember-cli-build中禁用minifyJs可以防止錯誤,但是隨後,應用程序在加載到瀏覽器時停滯不前,而在控制檯中,我看到另一個錯誤:「無法導入ember-resolver」。The Broccoli插件:[UglifyWriter]失敗,

我的猜測是,這是由於UglifyWriter不理解某處的某些代碼。

完整的錯誤是:

構建失敗。 文件:資產/ vendor.js(95443:4) 椰菜插件:[UglifyWriter]與失敗:在新JS_Parse_Error(EVAL在(/家/ larisoft /前端/ node_modules /醜化-JS /工具/節點 錯誤 的.js:1:1),:1545:18)

at js_error (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:1553:11) 

at croak (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2092:9) 

at token_error (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2100:9) 

at unexpected (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2106:9) 

at semicolon (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2126:56) 

at simple_statement (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2317:73) 

at eval (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2186:19) 

at eval (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2139:24) 

at block_ (eval at <anonymous> (/home/larisoft/frontend/node_modules/uglify-js/tools/node.js:1:1), <anonymous>:2432:20) 

青花菜插件在實例化: 在UglifyWriter.Plugin(/home/larisoft/frontend/node_modules/broccoli-plugin/index.js: 7:31)

at new UglifyWriter (/home/larisoft/frontend/node_modules/broccoli-uglify-sourcemap/index.js:25:10) 

at UglifyWriter (/home/larisoft/frontend/node_modules/broccoli-uglify-sourcemap/index.js:20:12) 

at Class.postprocessTree (/home/larisoft/frontend/node_modules/ember-cli-uglify/index.js:15:50) 

at /usr/local/lib/node_modules/ember-cli/lib/broccoli/ember-app.js:543:27 
at Array.forEach (native) 

at EmberApp.addonPostprocessTree (/usr/local/lib/node_modules/ember-cli/lib/broccoli/ember-app.js:541:23) 

at EmberApp.toTree (/usr/local/lib/node_modules/ember-cli/lib/broccoli/ember-app.js:1667:15) 

at module.exports (/home/larisoft/frontend/ember-cli-build.js:37:16) 

at Class.setupBroccoliBuilder (/usr/local/lib/node_modules/ember-cli/lib/models/builder.js:70:19) 

我的package.json

{ 
"name": "hospitalrun", 
"version": "0.9.12", 
"description": "Ember front end for HospitalRun", 
"homepage": "http://curacel.co", 
"directories": { 
"doc": "doc", 
"test": "tests" 
}, 
"scripts": { 
"build": "./script/build", 
"start": "./script/server", 
"test": "snyk test && ./script/test" 
}, 
"repository": { 
"type": "git", 
"url": "[email protected]:HospitalRun/hospitalrun-frontend" 
}, 
"engines": { 
"node": ">= 0.10.0" 
}, 
"author": "John Kleinschmidt", 
"contributors": [ 
"Joel Worrall", 
"Joel Glovier" 
], 
"license": "GPL-3.0", 
"devDependencies": { 
"body-parser": "^1.14.2", 
"broccoli-asset-rev": "^2.4.1", 
"broccoli-export-text": "0.0.2", 
"broccoli-funnel": "^1.0.1", 
"broccoli-manifest": "0.0.7", 
"broccoli-merge-trees": "^1.0.0", 
"broccoli-serviceworker": "0.1.0", 
"ember-ajax": "2.3.2", 
"ember-cli": "^2.4.1", 
"ember-cli-active-link-wrapper": "0.2.0", 
"ember-cli-app-version": "^1.0.0", 
"ember-cli-content-security-policy": "0.5.0", 
"ember-cli-dependency-checker": "^1.2.0", 
"ember-cli-deprecation-workflow": "0.2.2", 
"ember-cli-fake-server": "0.3.1", 
"ember-cli-htmlbars": "^1.0.7", 
"ember-cli-htmlbars-inline-precompile": "^0.3.1", 
"ember-cli-inject-live-reload": "^1.3.1", 
"ember-cli-qunit": "^2.0.0", 
"ember-cli-release": "1.0.0-beta.1", 
"ember-cli-sass": "^5.2.1", 
"ember-cli-scss-lint": "1.0.0", 
"ember-cli-sri": "^2.1.0", 
"ember-cli-uglify": "^1.2.0", 
"ember-data": "^2.4.0", 
"ember-disable-proxy-controllers": "^1.0.1", 
"ember-export-application-global": "^1.0.4", 
"ember-font-awesome": "2.1.1", 
"ember-i18n": "4.2.1", 
"ember-load-initializers": "^0.5.0", 
"ember-pouch": "^3.1.0", 
"ember-rapid-forms": "1.0.0-beta4", 
"ember-resolver": "^2.0.3", 
"ember-select-list": "0.9.5", 
"ember-simple-auth": "^1.1.0-beta.3", 
"ember-simple-auth-registration": "1.0.2", 
"ember-suave": "2.0.1", 
"ember-truth-helpers": "1.2.0", 
"ember-validations": "2.0.0-alpha.4", 
"express": "^4.8.5", 
"glob": "^7.0.0", 
"hospitalrun-dblisteners": "0.9.2", 
"hospitalrun-server-routes": "0.9.7", 
"loader.js": "^4.0.7", 
"nano": "6.2.0", 
"request": "2.72.0" 
}, 
"dependencies": { 
"ember-cli-babel": "^5.1.5", 
"ember-cli-uglify": "^1.2.0", 
"ember-radio-buttons": "^4.0.1", 
"ember-resolver": "^2.1.0", 
"snyk": "^1.14.1", 
"sw-toolbox": "^3.1.1", 
"uglify-js": "^2.7.4" 
}, 
"ember-addon": { 
"paths": [ 
    "lib/pouch-fixtures" 
] 
} 

}

我燼-CLI-編譯:

/* global require, module */ 
var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 
module.exports = function(defaults) { 
var app = new EmberApp(defaults, { 
    // Add options here 
}); 
// Use `app.import` to add additional libraries to the generated 
// output files. 
// 
// If you need to use different assets in different 
// environments, specify an object as the first parameter. That 
// object's keys should be the environment name and the values 
// should be the asset to use in that environment. 
// 
// If the library that you are including contains AMD or ES6 
// modules that you would like to import into your application 
// please specify an object with the list of modules as keys 
// along with the exports of each module as its value. 
app.import('vendor/pouchdb-list/pouchdb-list.js'); 
app.import('bower_components/node-uuid/uuid.js'); 
app.import('bower_components/bootstrap/dist/js/bootstrap.js'); 
app.import('bower_components/JsBarcode/CODE128.js'); 
app.import('bower_components/JsBarcode/JsBarcode.js'); 
app.import('vendor/dymo/DYMO.Label.Framework.1.2.6.js'); 
app.import('bower_components/moment/moment.js'); 
app.import('bower_components/typeahead.js/dist/typeahead.bundle.js'); 
app.import('bower_components/pikaday/pikaday.js'); 
app.import('bower_components/filer.js/src/filer.js'); 
app.import('bower_components/idb.filesystem/src/idb.filesystem.js'); 
app.import('bower_components/pikaday/css/pikaday.css'); 
app.import('vendor/octicons/octicons/octicons.css'); 

app.import('bower_components/pouchdb-load/dist/pouchdb.load.js'); 
app.import('bower_components/pouchdb/dist/pouchdb.memory.js'); 

return app.toTree(); 

};

回答

8

看起來uglify.js在ES6文件中有一些問題:https://forum.ionicframework.com/t/uglifyjs-fails-with-js-parse-error-error-but-no-stack-trace/66094。就我而言,足以將一個庫(摺疊到ascii)降級到ES5版本。

不幸的是,一個錯誤信息不是很有幫助,所以找到有問題的文件是不必要的困難。很難判斷哪個文件會導致您的案例中的錯誤,但我至少可以說出幫助我的是什麼。

我手動把日誌(與幫助下http://discuss.emberjs.com/t/debugging-failures-in-uglifyjs/7390/6):

function js_error(message, filename, line, col, pos) { 
    console.log(`message: ${message}/filename: ${filename}/line: ${line}`); 
    throw new JS_Parse_Error(message, filename, line, col, pos); 
}; 

js_error功能node_modules /醜化-JS/lib目錄/ parse.js(線205在我的情況),並得到了一個消息,實際上是有幫助的:

message: SyntaxError: Unexpected token: name (ASCIIFolder)/file: 0/line: 64911/position: 2070881 

然後,在路徑文本「ASCIIFolder」搜索發現,我是一個找到有問題的文件。

也可能有必要做「乾淨」安裝NPM和亭子包(https://emberigniter.com/update-latest-ember-data-cli/)的:

npm cache clean && bower cache clean 
rm -rf node_modules bower_components dist tmp 
npm install 
bower install 

或者您廠商可以完全禁用縮小文件。JS與[https://ember-cli.com/asset-compilation#exclude-from-minification](雖然它不是最大的解決方案):

// ember-cli-build.js 
var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 
module.exports = function(defaults) { 
    var app = new EmberApp(defaults, { 
    minifyJS: { 
     options: { 
     exclude: ["**/vendor.js"] 
     } 
    } 
    }); 

    //... 
    return app.toTree(); 
}; 

告訴西蘭花,醜化,sourcemap忽略vendor.js,因此,應避免錯誤的發生。

1

提到,我厭倦了這樣的錯誤,所以我用upglify-es替換uglify-js。 使用yarnember-cli

yarn upgrade [email protected]