节点.js - 语法错误:意外的令牌导入

2022-08-29 23:05:59

我不明白出了什么问题。节点 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

答案 1

节点 13+节点 13 开始,您可以使用扩展名,也可以在 package.json 中设置。您不需要使用该标志。模块现在在节点中标记为稳定.js.mjs{"type": "module"}--experimental-modules

节点 12节点 12 开始,您可以使用扩展名,也可以在 package.json 中设置。并且您需要运行带有标志的节点。.mjs"type": "module"--experimental-modules

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

node --experimental-modules my-app.mjs

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

请参阅 MDN 上的浏览器兼容性表此节点问题

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

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

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

const express = require("express");

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


答案 2

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

若要完成要尝试执行的操作(导入 Express 模块),此代码应该就足够了

var express = require("express");

另外,请确保您通过运行来安装Express

$ npm install express

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