我有两个js文件:play.js
和myStore.js
。
我想将myStore.js
中的代码导入play.js
并在那里使用它。我正在使用es2015
插件进行导入,但即使我设置了es2017
,它也会导致es2017
友好代码失败。
play.js :
import G from '../functions/myStore.js'; // import needs es2015
// this works with es2017, but not when es2015 is also included
for(k in [1,2,3]) console.log(k)
myStore.js
var G = {}
export default G
输出:
如果我没有import
任何内容,并且只使用了es2017
预设,则运行正常,但使用es2015
和{ {1}}使此失败如下:
es2017
我正在通过for (k in [1, 2, 3]) {
^
ReferenceError: k is not defined
从终端执行此操作。这是我的 package.json :
npm start
和我的 babel.rc :
{
"name": "functions",
"version": "1.0.0",
"description": "",
"main": "play.js",
"scripts": {
"start": "babel-node play.js"
},
"author": "Somjit",
"license": "ISC",
"devDependencies": {
"babel-cli": "^6.24.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-es2015-node5": "^1.2.0",
"babel-preset-es2017": "^6.22.0"
}
}
答案 0 :(得分:3)
确定。我的简短回答是......
1)Babel会读取您的代码,如果它看到一些新的js功能,则会使用预设将其转换为常规js。例如,如果它看到let a = 1
Babel使用preset-es2015
(知道let
是什么)并将此行转换为var a = 1
,那么您的浏览器就可以理解这一行。
2)如果您查看babel-preset-es2017的docs,您会发现它仅支持两个功能。您的代码中没有此功能。因此,在阅读您提供的代码时,babel不会使用此预设。所以es2017对你的问题无关紧要。
3)如果你运行没有es2015的代码,它允许你声明没有var的变量(因为你可以在没有严格模式的js中这样做)。但是当你使用这个预设时,Babel会读取你的代码并拖出一个错误,因为根据新的js标准,你需要用var,let或const声明变量,而不能只写a = 1
;
答案 1 :(得分:1)
当我开始使用babel甚至是小东西时,需要花费太多时间来理解。 然后我发现这个tutorial给了我很多帮助。
答案 2 :(得分:0)
在您的情况下,您的问题绝对不是babel-preset-es2017
。您必须安装babel-plugin-transform-runtime
并将其作为插件放在.babelrc
文件中。
安装:
npm install --save-dev babel-plugin-transform-runtime
设置.babelrc
文件:
{
"presets": [
"es2015",
"es2017"
],
"plugins": [
"transform-runtime"
]
}