我不明白是怎么回事。 节点v5.6.0 NPM v3.10.6

代码:

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

错误:

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

当前回答

如果你可以使用'babel',试着在package.json(——presets=es2015)中添加构建脚本,如下所示。它可以预编译导入代码到es2015

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

其他回答

不幸的是,Node.js还不支持ES6的导入。

要完成您要做的事情(导入Express模块),这段代码应该足够了

var express = require("express");

另外,确保通过运行安装了Express

$ npm install express

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

如果你可以使用'babel',试着在package.json(——presets=es2015)中添加构建脚本,如下所示。它可以预编译导入代码到es2015

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

我很惊讶esm竟然没有被提到。这个小但功能强大的包允许您使用import或require。

在项目中安装esm

$ NPM install——保存esm

更新您的节点启动脚本以使用esm

Node -r esm app.js

Esm就是管用。我在.mjs和——experimental-modules上浪费了大量的时间,却发现.mjs文件不能导入使用require或module.exports的文件。这是一个大问题,而esm允许你混合和匹配,它只是解决它…Esm就是管用。

Node 13+从Node 13开始,你可以使用.mjs扩展名,或者在package.json中设置{"type": "module"}。你不需要使用——experimental-modules标志。Modules现在在node.js中被标记为稳定

Node 12从Node 12开始,你可以使用.mjs扩展名,或者在package.json中设置"type": "module"。你需要带着——experimental-modules标志运行node。

节点9在节点9中,它被启用在一个标志后面,并使用.mjs扩展名。

node --experimental-modules my-app.mjs

虽然导入确实是ES6的一部分,但不幸的是,它在默认情况下还不被NodeJS支持,直到最近才在浏览器中获得支持。

查看浏览器compat表上的MDN和这个节点的问题。

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

工作正在进行中,但需要一些时间——我们目前预计至少需要一年。

在本地支持出现之前(现在在Node 13+中标记为稳定),你必须继续使用经典的require语句:

const express = require("express");

如果你真的想在NodeJS中使用新的ES6/7特性,你可以使用Babel编译它。下面是一个服务器示例。

错误: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;模块。出口= foo;