我已经安装了 Node 8.9.1(同样的问题发生在 v10.5.0 中)。
我正在尝试在带有 .mjs
import { throttle } from lodash;
我跑:
node --experimental-modules index.mjs
我得到:
SyntaxError: The requested module 'lodash' does not provide an export named 'throttle' at ModuleJob._instantiate (internal/modules/esm/module_job.js:80:21)
--experimental-modules
应该是 stop being experimental in v10 LTS ,那么为什么没有更多的模块作者加入这个潮流呢?
最佳答案
编辑了新的(更好的)答案
Node 团队……很慢。与此同时,为我们带来 Lodash(John-David Dalton)的人设想了一个绝妙的解决方案,他的想法是在 2019 年获得完整 ES6 模块支持的最佳方式。
(事实上,我想删除我之前的答案,但出于历史目的我已将其保留。)
新的解决方案非常简单。
第 1 步:
npm i esm
(https://www.npmjs.com/package/esm 了解包裹详情)
第 2 步:
node -r esm yourApp.js
这就是全部:真的就是这么简单。只需将 -r esm
添加为 Node arg,一切都会神奇地工作(它比 --experimental-modules
输入更少!)谢谢 John-David Dalton! !
正如我在最初的回答中所说,大概有一天 Node 最终会发布完整的 ES6 支持,但是当发生这种情况时,采用它就像从几个脚本中删除“-r esm”一样简单: D
最后,为了给予应有的荣誉,虽然我没有通过他的回答找到它,@Divyanshu Rawat 实际上早在我进行此更新之前就提供了该库的前身的答案。
原始答案
--experimental-modules
尚不支持命名导出:
--experimental-modules doesn't support importing named exports from a commonjs module (except node's own built-ins).
这就是您无法使用语法的原因:
import { throttle } from 'lodash';
相反(至少现在)你必须破坏你需要的东西:
import lodash from 'lodash';
const { throttle } = lodash;
大概有一天 Node 会添加对所有 ES 模块功能的支持。
关于node.js - Node --experimental-modules,请求的模块不提供名为的导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47277887/