- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在互联网上寻找,但没有明确的答案。
当前 Node.js 仅使用 CommonJS加载模块的语法,如果你真的想使用标准的 ECMAScript 2015 模块语法,你要么必须事先转译它,要么在运行时使用外部模块加载器。
目前我对使用这两种方法中的任何一种都不太乐观,Node.js 维护者是否甚至计划支持 ECMAScript 2015 模块?我还没有找到任何关于这个的提示。
目前,Node.js 6.x 声称支持 96% 的 ECMAScript 2015 功能,但没有任何对模块的引用( Node.js ECMAScript 2015 support link )。
您知道 Node.js 是否会在不久的将来立即支持这些模块?
最佳答案
Node.js 13.2.0 及以上
Node.js 13.2.0现在支持没有标志的 ES 模块 🎉。但是,该实现仍被标记为实验性的,因此在生产中谨慎使用。
要在 13.2.0 中启用 ECMAScript 模块 (ESM) 支持,请将以下内容添加到您的 package.json
:
{
"type": "module"
}
全部
.js
,
.mjs
(或没有扩展名的文件)将被视为 ESM。
package.json
之外,还有许多不同的选项。选择加入,所有这些都在
documentation for 13.2.0 中有详细说明.
[esm][3]
模块加载器,它是 Node.js 的 ES 模块规范的生产就绪实现:
node -r esm main.js
详细更新...
--experimental-modules
标志,但加载模块的方式有重大变化:
package.type
可以是 module
或 commonjs
type: "commonjs"
:.js
被解析为 CommonJS type: "module"
:.js
被解析为 ECMAScript 模块 --type=[mode]
让您在入口点设置类型。将覆盖 package.type
为入口点。 .cjs
.module
中导入 CommonJS模式。 --es-module-specifier-resolution=[type]
explicit
(默认)和 node
--es-module-specifier-resolution=node
启用 CommonJS 说明符解析算法 --experimental-json-loader
"type": "module"
时导入 JSON 的唯一方法import 'thing.json'
将通过独立于模式的实验加载器 package.main
为模块设置入口点node --experimental-modules index.mjs
这样做的计划是删除 v10.0 LTS 版本的标志。
--experimental-modules
后面启用标志:
{
"name": "testing-mjs",
"version": "1.0.0",
"description": "",
"main": "index.mjs" <-- Set this to be an mjs file
}
然后运行:
node --experimental-modules .
2017 年 2 月:
.mjs
文件扩展名。从中得出的结论是:
In other words, given two files
foo.js
andbar.mjs
, usingimport * from 'foo'
will treatfoo.js
as CommonJS whileimport * from 'bar'
will treatbar.mjs
as an ES6 Module
At the current point in time, there are still a number ofspecification and implementation issues that need to happen on the ES6and Virtual Machine side of things before Node.js can even beginworking up a supportable implementation of ES6 modules. Work is inprogress but it is going to take some time — We’re currently lookingat around a year at least.
*.mjs
似乎是最可能的解决方案,除非他们可以在没有用户输入的情况下准确检测 ECMAScript 模块 import/export
用于静态加载,除了新的
System.import
用于动态加载 - 同时仍保持
require
对于遗留代码。
关于javascript - Node.js 计划支持导入/导出 ES6 (ECMAScript 2015) 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132031/
我正在尝试为我的组件中声明的数组分配一个值。不幸的是,抛出了异常。 TypeError: Attempted to assign to readonly property 即使我删除了严格模式,仍然会
如果我将一个类导入到其他脚本中,我如何将参数传递给 ES6 语法中的类构造函数? 我想做这样的事情。我已经看到了各种建议,例如包装函数或使用工厂模式,但是否有更简洁、更简单的方法来做到这一点? //
我最近看了 ECMAScript 2015。 ECMAScript 2015 有类初始化器吗? 例如,我试着把类写得像一个解析器; class URLParser { parse(url) {
我目前正在尝试弄清楚为什么 JSDT 会发布类似“JavaScript error on valid regex”的错误'. 在我进行测试时,我意识到它适用于像这样的简单文件: var a = {
有一段时间我认为它们是同一回事,但我经常看到博客或此处的答案中的措辞似乎暗示两者之间存在差异。即使 SO 有两个不同的标签,但它们的描述并没有显示出任何明显的区别。 我四处搜索了一下,这只会增加困惑,
我最近使用了最新的 Laravel 5.3。在 gulp.js文件,有较新的 ES6 箭头函数语法: elixir(mix => { mix.sass('app.scss') .
在 block 作用域函数方面,ES6 相对于 ES5 有哪些优势?我的意思是,在这两种情况下,该 block 看起来非常相似,那么它有什么区别,性能方面哪种方法更好? ES6 block {
所以,我知道在 GWT 中我可以编写纯 javascript 代码的 JSNI 代码。但是,不幸的是,如果我在其中使用 ES6 代码,JSNI 代码将无法编译。 这意味着,例如,我不能做这样的事情:
所以,我知道在 GWT 中我可以编写纯 javascript 代码的 JSNI 代码。但是,不幸的是,如果我在其中使用 ES6 代码,JSNI 代码将无法编译。 这意味着,例如,我不能做这样的事情:
如何在 Visual Studio Code 中编写 ECMAScript 代码??我尝试编写 jsconfig.json 但不确定如何运行该文件。我什至尝试更改 tasks.json 但即使那样也无
尽管事实是const不能在 ECMAScript 2015 中赋值,如果对象没有被卡住,可以修改 Object.freeze . 自 const应该是不可变的,添加 Object.freeze 有意义
当我打开我的项目 .js 文件时,会出现以下警告: File watcher 'Babel' is available for this file. Description: 'Transpiles
我接受了 JavaScript 前端开发人员职位的面试。我失败了,因为我不知道一些高级问题。请帮助我至少理解这一点。 我的问题在于 ECMAScript 6 知识,而不是 ECMAScript 5 中
本文介绍ECMAScript 6即将带给我们新的数组操作方法,以及在怎样在现有浏览器应用这些新的数组特性。 Note: 我将使用交替使用构造器(constructor)和类(class)两个术语。
我指的是 https://tc39.es/ecma262/#sec-regexp-regular-expression-objects 中定义的 ECMAScript 正则表达式语法. 我通过几个在线
我有多个名为 PageX 的文件, PageY , PageZ等等 每一个都有一个 export default SETUP { path:'blah_X', component:X } . 在我的
也许这是一个基本问题,但是两者之间有什么区别: -在ES3支持下开发的一个Web项目, -在ES5支持下开发的Web项目? 换句话说,如果您支持ES5,则可以在项目中添加哪些增强功能? 最佳答案 在这
这个问题在这里已经有了答案: One-liner to take some properties from object in ES 6 (12 个答案) 关闭 6 年前。 是否有一个我正在空白的单
一段时间以来,我一直在使用 ES6 提供的模块。虽然我(本能地)知道最好使用它们,但我很难解释为什么。 带模块; 我可以做依赖声明(不是注入(inject))。我不必为我加载的每个 javascrip
从不可变映射中获取多个值的最佳方法是什么? const example = new Map({ id: 1, first: 'John', last: 'Smith',
我是一名优秀的程序员,十分优秀!