我已经安装了Node 8.9.1(同样的问题在v10.5.0中也会发生).

我试图在一个文件中使用来自npm包的命名导入,文件名为.mjs

import { throttle } from lodash;

我跑:

node --experimental-modules index.mjs

我得到:

SyntaxError:请求的模块"lodash"未提供名为"throttle"的导出

--experimental-modules应该是stop being experimental in v10 LTS,那么为什么没有更多的模块作者加入这股潮流呢?

推荐答案

EDITED NEW (AND MUCH BETTER) ANSWER

node 团队是...缓慢的与此同时,给我们带来Lodash的同一个人(John David Dalton)设想了一个brilliant解决方案,他的 idea 是2019年获得ES6模块全面支持的最佳方式.

(事实上,我很想删除我之前的答案,但出于历史原因,我把它留了下来.)

新的解决方案非常简单.

Step #1:

npm i esm

(https://www.npmjs.com/package/esm用于包装细节)

Step #2:

node -r esm yourApp.js

这就是全部:真的就这么简单.只需添加-r esm作为 node 参数,一切都会神奇地工作(它甚至比输入--experimental-modules更少!)谢谢约翰·大卫·道尔顿!!!

正如我在最初的回答中所说,大概someday Node最终将发布完整的ES6支持,但当这发生时,采用它将与从几个脚本中删除"-r esm"一样简单:D

最后,在我没有通过他的回答找到答案的情况下,@Divyanshu Rawat在我进行此更新之前很久就提供了一个关于该库前身的答案.

ORIGINAL ANSWER

--experimental-modules还不支持命名导出:

--实验模块不支持从commonjs模块导入命名导出( node 自身的内置除外).

这就是您无法使用语法的原因:

 import { throttle } from 'lodash';

相反(至少现在),你必须 destruct 你需要的东西:

 import lodash from 'lodash';
 const { throttle } = lodash;

大概有一天,Node将添加对所有ES模块功能的支持.

Node.js相关问答推荐

运行JEST测试时找不到模块&q;错误

如何在RavenDB中执行JS索引?

Mongoose更新许多不使用数组作为筛选器来更新记录

一个函数中的两个依赖的NodeJS数据库操作.如果第二个失败了怎么办?

如何使用Stripe测试失败的收费?

express 和 mongoose 的新密码不正确

Fly.io 启动问题:无法从源获取图像或构建错误:构建错误:连接期间出错:发布...

如何删除mongodb中嵌套数组中所有出现的数组元素

为什么我的 npm 脚本中的 glob 不起作用?

如何从名字,中间名,姓氏中获取全名并在结果中搜索匹配?

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

即使部署成功,也不会触发 Firebase 函数来填充 Firestore 集合.为什么?

为什么需要在 NodeJS 应用程序中创建服务器?

npm 不会安装 express 吗?

mongoose 模式中的嵌套对象

npm package.json 操作系统特定脚本

npm WARN 不推荐使用 graceful-fs@3.0.8:graceful-fs 版本 3

Express.js中的bodyParser.urlencoded({extended: true }))和bodyParser.json()是什么意思?

node.js 找不到模块mongodb

'node' 未被识别为内部或外部命令