我已经安装了 Node 8.9.1(v10.5.0 中也出现同样的问题)。
我正在尝试在文件中使用来自 npm 包的命名导入.mjs
import { throttle } from lodash;
I run:
node --experimental-modules index.mjs
我得到:
SyntaxError:请求的模块“lodash”未提供名为“throttle”的导出
在 ModuleJob._instantiate (内部/modules/esm/module_job.js:80:21)
--experimental-modules
应该是停止在 v10 LTS 中进行实验 http://2ality.com/2017/09/native-esm-node.html,那么为什么没有更多的模块作者加入这个行列呢?
编辑新的(更好的)答案
Node 团队……很慢。与此同时,为我们带来 Lodash 的同一个人(约翰·大卫·道尔顿饰)设想了一个杰出的解决方案,他的想法是 2019 年获得完整 ES6 模块支持的最佳方式。
(事实上,我want删除我之前的答案,但我将其保留用于历史目的。)
新的解决方案非常简单。
Step #1:
npm i esm
(https://www.npmjs.com/package/esm https://www.npmjs.com/package/esm欲了解包装详情)
Step #2:
node -r esm yourApp.js
这就是全部内容:真的就是这么简单。只需添加-r esm
作为 Node 参数,一切都神奇地工作(它甚至比--experimental-modules
!)谢谢约翰·大卫·道尔顿!
正如我在原来的回答中所说,大概somedayNode 最终将发布完整的 ES6 支持,但当这种情况发生时,采用它就像从一些脚本中删除“-r esm”一样简单:D
最后,为了给予应有的信任,虽然我没有通过他的答案找到它,但早在我进行此更新之前,@Divyanshu Rawat 实际上就提供了该库前身的答案。
原答案
--experimental-modules
尚不支持命名导出:
--experimental-modules 不支持从 commonjs 模块导入命名导出(节点自己的内置模块除外)。
- https://github.com/apollographql/graphql-tools/issues/913 https://github.com/apollographql/graphql-tools/issues/913
这就是您无法使用以下语法的原因:
import { throttle } from 'lodash';
相反(至少现在)你必须破坏你需要的东西:
import lodash from 'lodash';
const { throttle } = lodash;
想必有一天 Node 将添加对所有 ES 模块功能的支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)