Node.js-SyntaxError:意外的令牌导入

我不明白怎么了。 节点v5.6.0 NPM v3.10.6 html

代码: node

function (exports, require, module, __filename, __dirname) {
    import express from 'express'
};

错误: webpack

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)
    at node.js:1001:3

#1楼

不幸的是,Node.js尚不支持ES6的importgit

要完成您要尝试执行的操做(导入Express模块​​),此代码就足够了 es6

var express = require("express");

另外,请确保经过运行安装了Express github

$ npm install express

有关学习Node.js的更多信息,请参见Node.js文档web


#2楼

更新3:Node 13开始 ,您能够使用.mjs扩展名,也能够在package.json中设置“ type”:“ module”。 你并不须要使用--experimental-modules的标志。 express

更新2:节点12开始 ,您能够使用.mjs扩展名,也能够在.mjs设置"type": "module" 。 而且您须要使用--experimental-modules标志运行节点。 npm

更新:节点9中 ,它在标志后面启用,并使用.mjs扩展名。 json

node --experimental-modules my-app.mjs

虽然import确实是ES6的一部分,可是不幸的是,默认状况下NodeJS还没有支持import ,而且最近才在浏览器中提供支持。

请参阅有关MDN的浏览器兼容表以及此Node问题

摘自James M Snell 关于Node.js中ES6模块更新 (2017年2月):

工做正在进行中,但将须要一些时间-咱们目前至少须要一年左右的时间。

在本地显示支持以前,您必须继续使用经典的require语句:

const express = require("express");

若是您确实想在NodeJS中使用ES6 / 7的新功能,则能够使用Babel对其进行编译。 这是一个示例服务器


#3楼

错误: SyntaxError:意外的令牌导入或SyntaxError:意外的令牌导出


解决方案:以全部进口为例

const express = require('express'); const webpack = require('webpack'); const path = require('path'); const config = require('../webpack.config.dev'); const open = require('open');

并更改您的export default = foo;module.exports = foo;


#4楼

若是能够使用“ babel”,请尝试在package.json(-presets = es2015)中添加构建脚本,以下所示。 它能够将导入代码预编译到es2015

"build": "babel server --out-dir build --presets=es2015 && webpack"

#5楼

就我而言,它是在.babelrc文件,而且应包含如下内容:

{
  "presets": ["es2015-node5", "stage-3"],
  "plugins": []
}