2017-07-25 127 views
1

我想建立一个基本的模块化程序,但我似乎遇到导入模块的问题。我试图导入我的自定义模块,我得到以下错误巴贝尔ES6导入错误,SyntaxError:意外的令牌导入

(function (exports, require, module, __filename, __dirname) { import testStep from 'testStep'; 
                  ^^^^^^ 
SyntaxError: Unexpected token import 

导致该问题的代码:

testcase.js

import testStep from 'testStep'; 

testStep.hello(); 

testStep.js

var testStep = { 
    hello: hello, 
}; 

var hello =() => { 
    console.log('hello world'); 
}; 

export default {testStep}; 

package.json

{ 
    "name": "rebuild-poc", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "babel-polyfill": "^6.23.0", 
    "babel-preset-env": "^1.6.0" 
    }, 
    "dependencies": {} 
} 

.babelrc

{ 
    "presets": [ 
    "env" 
    ] 
} 

我已经尝试过其他几个补丁,比如设置一步步测试,作为一个阶级,以及使用要求(” ./ testStep.js'),但那些都似乎已经工作了。

我有什么东西与babel或我的文件之一设置不正确吗?

***编辑:我正在运行testCase.js与 '节点testCase.js'

+0

看起来像'testStep'中有一个额外的括号或额外逗号 – Matthew

+1

'import'不能在一个函数内 –

+0

@Meshe在es6尾随逗号是允许的,但我试过了,它删除了,它没有修复问题。 –

回答

4

请安装babel-cli并致电您的文件:./node_modules/.bin/babel-node testcase.js

它会失败。现在我们必须修复你的代码。

testStep.js应该是这样的:

var hello =() => { 
    console.log('hello world'); 
}; 

var testStep = { 
    hello: hello, 
}; 

export default testStep; 

然后,它会工作。 ;)

https://babeljs.io/的第一次介绍是,你应该安装babel-clibabel-preset-env。 ;)

你也可以写你的testStep.js这样的:

var testStep = { 
    hello: hello, 
}; 

function hello() { 
    console.log('hello world'); 
}; 

export default testStep; 

这使提升的初衷。像Jacob在他的第一点说。

+1

这解决了我的问题!谢谢! –

0
  1. 您需要定义hellofunction,使用var,你不会有function hoisting,所以声明testStep时,hello未定义。

  2. 如果要使用es模块,可以使用babel-registerbabel-node。 在您的代码中,节点无法处理es模块。

通天注册

随着倍倍尔注册,所有的模块将被处理巴贝尔在导入时。

首先,yarn add babel-register babel-cli --devnpm install babel-register babel-cli -dev 然后创建一个入口文件:

// entry.js 
require('babel-register') 
require('testcase') 

在你的测试用例,你可以使用ES模块现在。

编辑您的package.json:

"scripts": { 
    "test": "node entry.js" 
}, 

可以运行在终端yarn testnpm run test。你不需要babel-polyfill,这是浏览器,而不是节点。

+0

解决吊装问题的好处。 ;) – danbruegge

0

从巴贝尔6发行说明:

插件预置

$ npm install --save-dev babel-preset-es2015 

保存它.babelrc文件

{ 
    presets: [“es2015”] 
} 

发布说明: https://babeljs.io/blog/2015/10/29/6.0.0

+1

巴别尔建议使用另一个软件包'babel-preset-env' –

相关问题