node.js - 如何在 node.js 中使用 es6 模块
问题描述
我正在尝试使用 ES6 语法将 express 导入我的项目,但它一直给我错误:
import express from "express";
SyntaxError: Unexpected identifier
我做了一些研究,发现人们说要添加:
“类型”:“模块”
到我的 package.json 文件,我已经完成了:
...
"description": "Shopping list to learn the MERN stack",
"type": "module",
"main": "server.js",
"scripts": {
"start": "node server.js",
"server": "nodemon server.js"
},
...
但我仍然遇到同样的问题。我更喜欢使用 import ES6 语法而不是这种语法。
const express = require('express')
解决方案
解决方案:
对我来说,最好、最简单和最兼容的解决方法(日期为2019 年 9 月)是:
npm install esm
- 确保
node
使用该-r esm
选项运行脚本。
就那么简单。
节点方式:
(根据ECMAScript 模块文档)
除了NodeJS中的"type": "module"
属性之外,还需要通过.package.json
node --experimental-modules <your_script.js>
新的 ES6 支持将处理任何一个.mjs
或扩展文件中的代码。.js
重命名我觉得很不方便。
注意: "type": "module"
对于支持.js
文件尤为重要。阅读链接的文档。
NodeJS 提供的带有--experimental-modules
标志的解决方案在所有情况下都不适用于我。♂️</p>
添加esm
包更易于维护;并且可靠。一旦 ESM 支持不再是实验性的,就可以轻松/快速地删除。
题外话:
如果你想在你的 ES6 代码上运行测试 import/export
,我建议你依赖一个可靠/灵活的框架,比如 Mocha。
您可以按照此说明运行支持 ES6 的 Mocha 测试。
尝试使用Jest我无法成功运行测试。显然他们不想直接支持实验性的 ES6 并建议转译代码(我讨厌的事情)。
参考:
推荐阅读
- css - Shopify 购物车计数器未在平板电脑 (IPAD) 中显示对齐
- javascript - 从chrome扩展的后台页面访问redux store
- android - 单击搜索栏显示列表视图
- php - 从 puppet 为 jenkins 创建 docker 图像
- android - 如何为多个视图容器创建一个回收器视图适配器,该适配器与不在同一个回收器视图列表中的所选视图器匹配
- angular - Angular 中 APP_INITIALIZER 的等效模块
- facebook - Graph API Facebook 用于私人档案,没有点赞,没有反应,也没有评论
- android - 地图中的列表不会出现在我的 ListView 中
- javascript - 从 asp.net 和 Ajax 的列表中删除自动完成所选项目
- java - 获取arraylist中指定位置的元素