2016-07-24 4 views
1

Я работаю над проектом dojo (1.11.x) и недавно начал использовать синтаксис ES6 (ES2015), такой как константные, let и шаблонные литералы. Он работал нормально, пока я не создаю проект с использованием dojo-util. У меня есть ошибки как нижеdojo build systems не распознает синтаксис es6

ERROR - Parse error. TypeError: redeclaration of const {variable name} 
ERROR - Parse error. illegal character 
        return `<a href="/xxx/xxx/${a}">${b}</a>`; 
          ^

Есть ли способ, чтобы система сборки распознавать синтаксис ES6 или обойти проверку синтаксиса?

+0

Предполагаете, вы ожидаете, что ваш код будет запущен только в браузере, поддерживающем ES6 (например, нет IE10)? В противном случае, вы должны сначала перенести свой ES6 в ES5, и он решит вашу проблему. – ben

+0

BTW. Я думаю, проблема связана с оптимизацией (shrinkafe, close или uglifyjs) – ben

ответ

1

Последняя версия 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.

+0

спасибо за ответ. Я попробую это. –

+1

Поскольку это все еще не работает для меня, я попросил Додзо помочь и прояснить это. См. Https://bugs.dojotoolkit.org/ticket/19020#ticket – PaulR

+0

Они подтвердили, что это по-прежнему открытая проблема, поэтому я думаю, нам нужно подождать. – PaulR

Смежные вопросы