我使用ES6通过jspm + SystemJS + traceur根据jspm教程。
在Chrome和Opera中一切正常,然而,控制台在其他浏览器中发布各种错误。
Firefox: SyntaxError: class is a reserved identifier, uncaught exception: SyntaxError: class is a reserved identifier
边缘:SCRIPT1002: Syntax error, Potentially unhandled rejection [2] Syntax error
Vivaldi: Unexpected token =>
SystemJS自述声明它甚至可以运行IE8+。
My jspm.config.js
:
System.config({
baseURL: "/",
defaultJSExtensions: true,
transpiler: "traceur",
babelOptions: {
"optional": [
"runtime",
"optimisation.modules.system"
]
},
paths: {
"github:*": "jspm_packages/github/*",
"npm:*": "jspm_packages/npm/*"
},
shim: {
"packages": {
"assets/js/lib/tabs": {
"main": "tabby",
"format": "global",
"deps": "jquery",
"exports": "$.tabby"
},
"assets/js/lib/select": {
"main": "selectify",
"format": "global",
"deps": "jquery",
"exports": "$.selectify"
}
}
},
map: {
"babel": "npm:babel-core@5.8.25",
"babel-runtime": "npm:babel-runtime@5.8.25",
"core-js": "npm:core-js@1.2.1",
"jquery": "github:components/jquery@2.1.4",
"jquery-mask-plugin": "npm:jquery-mask-plugin@1.13.4",
"jquery-validation": "github:jzaefferer/jquery-validation@1.14.0",
"selectify": "assets/js/lib/select",
"tabby": "assets/js/lib/tabs",
"traceur": "github:jmcriffey/bower-traceur@0.0.91",
"traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.91",
"github:jspm/nodelibs-assert@0.1.0": {
"assert": "npm:assert@1.3.0"
},
"github:jspm/nodelibs-process@0.1.2": {
"process": "npm:process@0.11.2"
},
"github:jspm/nodelibs-util@0.1.0": {
"util": "npm:util@0.10.3"
},
"github:jzaefferer/jquery-validation@1.14.0": {
"jquery": "github:components/jquery@2.1.4"
},
"npm:assert@1.3.0": {
"util": "npm:util@0.10.3"
},
"npm:babel-runtime@5.8.25": {
"process": "github:jspm/nodelibs-process@0.1.2"
},
"npm:core-js@1.2.1": {
"fs": "github:jspm/nodelibs-fs@0.1.2",
"process": "github:jspm/nodelibs-process@0.1.2",
"systemjs-json": "github:systemjs/plugin-json@0.1.0"
},
"npm:inherits@2.0.1": {
"util": "github:jspm/nodelibs-util@0.1.0"
},
"npm:process@0.11.2": {
"assert": "github:jspm/nodelibs-assert@0.1.0"
},
"npm:util@0.10.3": {
"inherits": "npm:inherits@2.0.1",
"process": "github:jspm/nodelibs-process@0.1.2"
}
}
});
And package.json
:
{
"name": "project_name",
"version": "1.0.0",
"description": "project_description",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "project_author",
"license": "ISC",
"devDependencies": {
"glob": "^5.0.15",
"gulp": "^3.9.0",
"gulp-autoprefixer": "^3.0.2",
"gulp-concat-css": "^2.2.0",
"gulp-imagemin": "^2.3.0",
"gulp-jspm": "^0.3.2",
"gulp-less": "^3.0.3",
"gulp-minify-css": "^1.2.1",
"gulp-notify": "^2.2.0",
"gulp-rename": "^1.2.2",
"imagemin-pngquant": "^4.2.0",
"jspm": "^0.16.11"
},
"jspm": {
"configFile": "jspm.config.js",
"dependencies": {
"jquery": "github:components/jquery@^2.1.4",
"jquery-mask-plugin": "npm:jquery-mask-plugin@^1.13.4",
"jquery-validation": "github:jzaefferer/jquery-validation@^1.14.0"
},
"devDependencies": {
"babel": "npm:babel-core@^5.8.24",
"babel-runtime": "npm:babel-runtime@^5.8.24",
"core-js": "npm:core-js@^1.1.4",
"traceur": "github:jmcriffey/bower-traceur@0.0.91",
"traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.91"
}
}
}
迫切想解决这个问题,据我所知,可能有很多原因。也许有人遇到了类似的问题,设置
明白了
这是由于jspm.config.js
shim中提供的一个插件。该插件使用Immediately-Invoked Arrow Function
符号和class
字,没有任何导出指令,因此,shim插件没有被翻译成ES5。
因此,与其在第三方库(shim插件)中使用ES6类,不如使用简单的原型继承。
我花了好几个小时才找到。