Babel ES6导入错误,SyntaxError:意外的令牌导入

时间:2017-07-25 03:17:45

标签: javascript node.js babeljs

我正在尝试建立一个基本的模块化程序,但是我似乎遇到了导入模块的问题。我尝试导入我的自定义模块,我收到以下错误:

(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设置为类,以及使用require('./testStep.js'),但这些修复程序似乎都没有用。

我是否在babel或我的某个文件中设置了错误的内容?

***修改:我正在使用testCase.js运行node testCase.js

3 个答案:

答案 0 :(得分:5)

请安装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 :(得分:2)

来自babel 6发行说明:

插件预设

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

保存.babelrc文件

{
  presets: ["env"]
}

注意: https://babeljs.io/docs/en/babel-preset-env#docsNav

答案 2 :(得分:0)

  1. 您需要使用hello使用function定义var,而不是function hoisting,因此在声明testStep时,{{ 1}}未定义。

  2. 如果您想使用es模块,可以使用hellobabel-register。 在您的代码中,节点无法处理es模块。

  3. <强>巴别注册

    使用bebel-register,所有模块将在导入时由babel处理。

    首先,babel-nodeyarn add babel-register babel-cli --dev 然后创建一个条目文件:

    npm install babel-register
     babel-cli -dev

    在您的测试用例中,您现在可以使用es模块。

    编辑你的package.json:

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

    您可以在终端中运行"scripts": { "test": "node entry.js" }, yarn test

    您不需要npm run test,即浏览器,而不是节点。