我正在开发Node.js项目。我正在尝试将ES6功能(例如“导入”,“导出”)与新的ESM库一起使用,但是我正在努力在Express应用程序中使用它。

这是我所做的:


在项目目录中运行npm i --save @std/esm
在index.js中,在第一行添加“ require("@std/esm")


使用ESS“导入”

这是我的index.js

require("@std/esm")
// const express = require( "express" );
import express from '../node_modules/express'
const router = express.Router();
/* GET home page. */
router.get( "/", ( req, res, next ) => {
    res.render( "index", { "title": "Express" } );
} );
// export default router
module.exports = router;


运行项目,但出现此错误

/usr/local/bin/node /Volumes/Elements/Learning/Node/Project/NodeMongoTest1/routes/index.js
/Volumes/Elements/Learning/Node/Project/NodeMongoTest1/routes/index.js:3
import express from '../node_modules/express'
^^^^^^

    SyntaxError: Unexpected token import
        at new Script (vm.js:51:7)
        at createScript (vm.js:136:10)
        at Object.runInThisContext (vm.js:197:10)
        at Module._compile (module.js:626:28)
        at Object.Module._extensions..js (module.js:673:10)
        at Module.load (module.js:575:32)
        at tryModuleLoad (module.js:515:12)
        at Function.Module._load (module.js:507:3)
        at Function.Module.runMain (module.js:703:10)
        at startup (bootstrap_node.js:193:16)

    Process finished with exit code 1


有谁知道如何使用Express Node.js配置ESM?

最佳答案

使用@ std / esm启用ESM的方法有三种。

使用CJS桥启用ESM:
index.js

// Provide options as a parameter, environment variable, or rc file.
require = require("@std/esm")(module/*, options*/)
module.exports = require("./main.mjs").default



使用-r选项在节点CLI中启用ESM:

节点-r @ std / esm main.mjs
在节点REPL中启用ESM:

节点-r @ std / esm


首先尝试#2检查索引文件中的其余代码是否正确

关于node.js - 使用@ std/esm在Express node.js项目中使用ES6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49091922/

10-14 02:36