当前位置: 首页 > 面试题库 >

节点--experimental-modules,请求的模块未提供名为

金瑞
2023-03-14
问题内容

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

我正在尝试使用带有文件的npm包中的命名导入 .mjs

import { throttle } from lodash;

我跑:

node --experimental-modules index.mjs

我得到:

语法错误:所请求的模块“
lodash”未在ModuleJob._instantiate(内部/模块/esm/module_job.js:80:21)处提供名为“
throttle”的导出

--experimental-modules应该停止在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!)谢谢约翰·戴维·道尔顿!

就像我在原始答案中所说的那样,大概 有朝一日 Node最终会完全释放对ES6的支持,但是在这种情况下,采用它就像从一些脚本中删除“ -r
esm”一样容易:D

最后,要归功于到期日,尽管我没有从他的回答中找到答案,但@Divyanshu Rawat实际上在我进行此更新之前就提供了该库的前身的答案。

原始答案

--experimental-modules 尚不支持命名出口:

--experimental-modules不支持从commonjs模块导入命名的导出(节点自身的内置组件除外)。

  • https://github.com/apollographql/graphql-tools/issues/913

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

 import { throttle } from 'lodash';

相反(至少现在),您必须破坏所需的东西:

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

大概有一天,Node将增加对所有ES Module功能的支持。



 类似资料:
  • 问题内容: 我在运行节点应用程序时使用该标志以使用ES6模块。 但是,当我使用此标志时,该元变量不可用。是否存在另一种方法来获取与该模式兼容的存储在其中的相同字符串? 问题答案: 从Node.js 10.12开始,有一种替代方案,不需要跨平台创建多个文件并处理文件名中的特殊字符:

  • 我用请求模块和异步模块的组合并行爬行了很多链接 我注意到很多和错误,尽管使用chrome可以访问链接并快速响应。 在请求选项中,我将限制为2,将限制为10000。我使用限制为2的来减少每次请求的并行性。所以我有2套接字,2个请求和10秒的超时时间来等待来自服务器的头响应,但我得到了这些错误。 在这里s我使用的请求配置: 以下是我用来生成链接的代码片段: 我听了错误事件,我看到每当错误代码为时,co

  • 本章描述 Linux 核心如何只在需要的时候才动态加载函数,例如文件系统。 Linux 是一个完整的核心,就是说,它是一个单一的巨大的程序,核心的功能组件可以访问它的所有的内部数据结构以及例程。另一种方法是使用一个微内核的结构,核心的功能片被分成独立的单元,互相之间有严格的通讯机制。这样通过配置进程向核心增加新的组件不花多少时间。比如你希望增加一个 NCR 810 SCSI 卡的 SCSI 驱动程

  • 模块是一种集中方法,类和常量的方法,主要带来两个好处: 模块提供了一个命名空间(namespace )防止命名冲突。 通过模块能实现混合插入(mixin)功能。 命名空间 当你写的Ruby程序越来越大,越来越多之后,都会发现有很多代码都可以重用,通常可以将相关例程组成一个库,分布到不同的文件以便被其它Ruby程序共享。 通常,这些代码都以类的形式组织在一起,所以你可能将一个类或者和其相关的几个类放

  • Angular JS中使用模块在您的应用程序中设置逻辑边界。 因此,您可以将所有内容构建到单独的模块中,以分离应用程序的功能,而不是将所有内容编码到一个应用程序中。 让我们检查一下添加到演示应用程序的代码。 在Visual Studio代码中,转到app文件夹中的app.module.ts文件夹。 这称为根模块类。 以下代码将出现在app.module.ts文件中。 import { NgModu

  • AngularJS支持模块化方法。 模块用于将代码中的逻辑(如服务,控制器,应用程序等)与代码分开,并保持代码清洁。 我们在单独的js文件中定义模块,并根据module.js文件命名它们。 在以下示例中,我们将创建两个模块 - Application Module - 用于使用控制器初始化应用程序。 Controller Module - 用于定义控制器。 应用模块 这是一个名为mainApp.j