私はdojoプロジェクト(1.11.x)に取り組んでおり、最近const、let、テンプレート・リテラルなどのES6(ES2015)構文を使用し始めました。 dojo-utilを使ってプロジェクトをビルドするまではうまくいきました。以下のようなエラーが表示されますdojoビルド・システムはes6構文を認識しません
ビルドシステムにES6の構文を認識させるか構文チェックをバイパスする方法はありますか?
私はdojoプロジェクト(1.11.x)に取り組んでおり、最近const、let、テンプレート・リテラルなどのES6(ES2015)構文を使用し始めました。 dojo-utilを使ってプロジェクトをビルドするまではうまくいきました。以下のようなエラーが表示されますdojoビルド・システムはes6構文を認識しません
ビルドシステムにES6の構文を認識させるか構文チェックをバイパスする方法はありますか?
2020年12月の最新リリースDojo 1.12は、トランスキングES6からES5をサポートするClosure Compiler 20160911を使用するように更新されました。
私は1つのプロジェクトに古いES5モジュールと新しいものをES6に持っています。
ES6モジュールでは、最初に「use strict」を追加する必要があります。それ以外の場合は、が失敗します。
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プロジェクトに統合できます。
私もlanguageOutを設定することにより、ES6モジュールに「厳格な使用」を回避しようとしていた。mention hereとしてECMASCRIPT5_STRICTが、それは道場自体を壊します。
私はあなたのコードがES6をサポートしているブラウザでのみ実行されることを期待しています(IE10はありません)?そうでなければ、ES6を最初にES5に置き換えなければなりません。問題は – ben
BTWで解決されます。問題は最適化(shrinksafe、closure、またはuglifyjs)のためです。 – ben