栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

NodeJS计划支持导入/导出es6(es2015)模块

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NodeJS计划支持导入/导出es6(es2015)模块

节点13.2.0及以上

NodeJS13.2.0现在支持不带标志的ES模块但是,该实现仍被标记为实验性的,因此在生产中使用时应谨慎。

要在13.2.0中启用ESM支持,请将以下内容添加到您的

package.json

{  "type": "module"}

所有

.js
.mjs
(或不带扩展名的文件)将被视为ESM。

除了整个

package.json
加入,还有许多其他选项,有关详细信息,请参见13.2.0的文档。

节点13.1.0及以下

那些仍在使用旧版本Node的用户可能想尝试esm模块加载器,这是NodeJS
ES模块规范的生产就绪型实现:

node -r esm main.js

详细更新…

2019年4月23日

最近降落的PR更改了检测ES模块的方式:https :
//github.com/nodejs/node/pull/26745

它仍然落后

--experimental-modules
,但是模块的加载方式发生了重大变化:

  • package.type
    可以是
    module
    commonjs
    • type: "commonjs"
    • .js
      被解析为commonjs
    • 不带扩展名的入口点的默认值为commonjs
    • type: "module":
    • .js
      被解析为esm
    • 默认不支持加载JSON或本机模块
    • 不带扩展名的入口点的默认值为esm
  • --type=[mode]
    让您在入口点上设置类型。将覆盖
    package.type
    入口点。
  • 新的文件扩展名
    .cjs
    • 这专门用于支持以该
      module
      方式导入commonjs 。
    • 这仅在esm加载器中,commonjs加载器保持不变,但是如果您使用完整的文件路径,则扩展名将在旧的加载器中工作。
  • --es-module-specifier-resolution=[type]
    • 选项是
      explicit
      (默认)和
      node
    • 默认情况下,我们的加载程序不允许导入中的可选扩展名,如果存在一个扩展名,则模块路径必须包含扩展名
    • 默认情况下,我们的加载器不允许导入具有索引文件的目录
    • 开发人员可以使用
      --es-module-specifier-resolution=node
      启用commonjs说明符解析算法
    • 这不是“功能”,而是实验的一种实现。预期在删除标志之前会发生变化
  • --experimental-json-loader
    • 何时导入json的唯一方法
      "type": "module"
    • 当启用时,所有模式
      import 'thing.json'
      都会独立于模式进入实验加载程序
    • 基于whatwg / html#4315
  • 您可以
    package.main
    用来设置模块的入口点
    • main中使用的文件扩展名将根据模块的类型进行解析

2019年1月17日

节点11.6.0仍在标志后面将ES模块列为实验模块。

2017年9月13日

NodeJS 8.5.0已发布,在标志后面支持mjs文件:

node --experimental-modules index.mjs

计划是删除v10.0 LTS版本的标志。

-过时的信息。 出于历史目的保留在这里

2017年9月8日

NodeJS
master分支已更新,最初支持ESM模块:https
//github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
它应该在最新的每晚更新中可用(可以[通过nvm](https://medium.com/@poenneby/with-nvm-installed-you-
can-do-this-54585c77685c)进行[安装](https://medium.com/@poenneby/with-nvm-
installed-you-can-do-
this-54585c77685c)以与您现有的安装一起运行):https
//nodejs.org/download/nightly/

并在

--experimental-modules
标志后面启用:

package.json

{  "name": "testing-mjs",  "version": "1.0.0",  "description": "",  "main": "index.mjs" <-- Set this to be an mjs file}

然后运行:

node --experimental-modules .

2017年2月:

https://medium.com/@jasnell/an-update-on-es6-modules-in-node-
js-42c958b890c#.6ye7mtn37

NodeJS伙计们认为 最糟糕的 解决方案是使用

.mjs
文件扩展名。得出的结论是:

换句话说,给定两个文件

foo.js
bar.mjs
,using
import * from'foo'
将被
foo.js
视为CommonJS,而
import * from 'bar'
将被
bar.mjs
视为ES6模块

至于时间表…

在当前时间点上,在Node.js甚至开始着手支持ES6模块的实现之前,ES6和虚拟机方面仍然需要解决许多规范和实现问题。工作仍在进行中,但将需要一些时间-
我们目前 至少 需要一年左右的时间。

2016年10月:

Node.JS的开发人员之一最近参加了TC-39会议,并撰写了一篇关于实现Node.JS的阻止程序的绝妙文章:

https://hackernoon.com/node-js-tc-39-and-
modules-a1118aecf95e

基本的收获是:

  • 对ES模块进行静态分析,对CommonJS进行评估
  • CommonJS模块允许猴子补丁导出,而ES模块目前不支持
  • 如果没有某种形式的用户输入,很难检测出什么是ES模块以及什么是CommonJS,但是他们正在尝试。
  • *.mjs
    似乎是最可能的解决方案,除非他们可以在无需用户输入的情况下准确检测出ES模块

-原始答案-

这已经很长时间了。最重要的是,是的,Node最终将支持导入/导出模块的ES2015语法-
最有可能在最终确定并同意加载模块的规范时。

这是对
NodeJS保持良好状态的一个很好的概述。本质上,他们需要确保新规范适用于主要是有条件的,同步加载的Node以及主要是异步的HTML。

目前尚无人知道,但我想Node除了支持动态加载

import/export
的新功能外,还将支持静态
System.import
加载-
同时仍保留
require
旧代码。

以下是一些有关Node如何实现此目标的建议:

  • 捍卫.js
  • .mjs模块


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号