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

2022-01-30 00:00:00 node.js javascript npm ecmascript-6

我不明白出了什么问题.节点 v5.6.0NPM v3.10.6

I don't understand what is wrong. Node 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

推荐答案

Node 13+ 自 节点 13,你可以使用 .mjs 扩展名,或者设置 {"type":"module"} 在你的 package.json 中.您不需要使用 --experimental-modules 标志.模块现在在 node.js 中被标记为稳定

Node 13+ Since Node 13, you can use either the .mjs extension, or set {"type": "module"} in your package.json. You don't need to use the --experimental-modules flag. Modules is now marked as stable in node.js

节点 12 由于 节点 12,您可以使用任一.mjs 扩展名,或在 package.json 中设置 type": module".您需要使用 --experimental-modules 标志运行节点.

Node 12 Since Node 12, you can use either the .mjs extension, or set "type": "module" in your package.json. And you need to run node with the --experimental-modules flag.

节点 9 在 节点 9,它在标志后面启用,并使用 .mjs 扩展名.

Node 9 In Node 9, it is enabled behind a flag, and uses the .mjs extension.

node --experimental-modules my-app.mjs


虽然 import 确实是 ES6 的一部分,但 遗憾的是,NodeJS 默认还不支持它,并且只是最近才在浏览器中获得支持.


While import is indeed part of ES6, it is unfortunately not yet supported in NodeJS by default, and has only very recently landed support in browsers.

请参阅 浏览器兼容表在 MDN 和这个节点问题.

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

From James M Snell's Update on ES6 Modules in Node.js (February 2017):

工作正在进行中,但需要一些时间 — 我们目前正在考虑至少一年左右.

Work is in progress but it is going to take some time — We’re currently looking at around a year at least.

直到原生支持(现在在 Node 13+ 中标记为稳定),你必须继续使用经典的require语句:

Until support shows up natively (now marked stable in Node 13+), you'll have to continue using classic require statements:

const express = require("express");

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

If you really want to use new ES6/7 features in NodeJS, you can compile it using Babel. Here's an example server.

相关文章