Последняя версия Dojo 1.12 с декабря 2016 года обновлена, чтобы использовать компилятор Closure 20160911, который поддерживает пересылку ES6 на ES5.
У меня есть в одном проекте старые модули ES5 и новые в ES6.
В модулях ES6 вы должны добавить «используйте строгое» в начале, иначе строительство не удастся.
error(307) Failed to evaluate module tagged as pure AMD
(fell back to processing with regular expressions). module: app/es6/Test;
error: SyntaxError: Block-scoped declarations (let, const, function, class)
not yet supported outside strict mode
приложение/ES6/Dialog.js
"use strict"
define(["dijit/ConfirmDialog"], (ConfirmDialog) => {
let id = '1'
const dialog = new ConfirmDialog({
title: "Delete",
content: `Are you sure you want to delete ${id} ?`,
style: "width: 300px"
})
dialog.show()
})
Затем в app.profile.js добавить optimizeOptions объект
...
optimizeOptions: {
languageIn: 'ECMASCRIPT6',
languageOut: 'ECMASCRIPT5'
},
layerOptimize: "closure.keeplines",
optimize: "closure.keeplines",
cssOptimize: "comments",
mini: true,
stripConsole: "all",
selectorEngine: "lite",
useSourceMaps: false,
...
layers: {
"dojo/dojo": {
includeLocales: [ 'en-us' ],
include: [ "dojo/dojo", "dojo/hash" ],
boot: true,
customBase: true
}
"app/Main": {
includeLocales: [ 'en-us' ],
include: [
'app/Header',
'app/Main'
]
},
...
приложение/Main.js
define(["app/es6/Dialog"], function(Dialog) {
Dialog.show();
});
Таким образом, вы можете интегрировать ES6 в свой текущий проект Dojo.
Я также пытался избежать «использовать строгий» в ES6 модулей, установив languageOut: ECMASCRIPT5_STRICT в mention here, но он ломает сам Dojo.
Предполагаете, вы ожидаете, что ваш код будет запущен только в браузере, поддерживающем ES6 (например, нет IE10)? В противном случае, вы должны сначала перенести свой ES6 в ES5, и он решит вашу проблему. – ben
BTW. Я думаю, проблема связана с оптимизацией (shrinkafe, close или uglifyjs) – ben