Node.js v13.2.0 开始支持ES modules了

简介: Node.js v13.2.0 开始支持ES modules了

640.jpg

写在前面


Node.js 前不久发布了v13.2.0,宣布开始支持ES modules。在此之前,想要在node中使用ES modules,需要添加--experimental-module。v13.2.0版本后,可以直接使用ES modules了。


在Node中使用ES Modules


想要在项目中使用ES modules,有以下两种方法:


1、文件后缀名使用.mjs


举个例子,假设项目目录如下:


.|____component| |____a.mjs|____index.mjs


文件内容如下:


// component/a.mjslet a = 'This is component a';export default a;
// index.mjsimport a from './component/a.mjs';console.log(a);


执行node index.mjs,代码可以正确执行,输出如下:


(node:77465) ExperimentalWarning: The ESM module loader is experimental.This is component a


2、文件依然使用.js的后缀名,在项目的package.json中设置:type:module


项目目录如下:


.|____component| |____a.js|____package.json|____index.js


各个文件内容如下:


// component/a.jslet a = 'This is component a';export default a;
// index.jsimport a from './component/a.mjs';console.log(a);
// package.json{  ...  "type": "module", // 必须要有这一行  ...}


执行node index.js,代码可以正确执行,输出如下:


(node:78977) ExperimentalWarning: The ESM module loader is experimental.This is component a


如果在命令行使用ES module,需要加上--input-type=module。举个例子:


node --input-type=module --eval "import { sep } from 'path'; console.log(sep);"


需要注意的是,目前,ES module的实现还是实验性质的,后续有随时调整的可能。


Import


import引入ES module时,支持以下几种方式:

  1. 相对路径 (./file.mjs)
  2. 绝对路径 (file:///opt/app/file.mjs)
  3. 模块名 (es-module-package’)
  4. 模块内路径 (es-module-package/lib/file.mjs)


另外,使用import引用ES module时,可以像这样使用:

  1. import _ from ‘es-module-package’
  2. import { shuffle } from ‘es-module-package
  3. import * as fs from ‘fs

所有的Node内置模块,例如fspath,均支持上述三种方式来引用。


Import与Commonjs


import也可以引入Commonjs的模块,包含以下两种情况:


1、模块使用Commonjs规范编写,并且后缀名为:.cjs


例如代码目录如下:


.|____component| |____a.cjs|____package.json|____index.js

文件内容如下:


// component/a.cjslet a = 'This is component a';console.log('aaaa');module.exports = a;
// index.jsimport a from './component/a.cjs'; console.log(a);
// package.json{  ...  "type": "module",  ...}


执行node index.js,代码可以正确执行,输入如下:


(node:81677) ExperimentalWarning: The ESM module loader is experimental.aaaaThis is component a


2、模块拥有自身的package.json,没有设置"type": "module"或设置"type": "commonjs"


举个例子,代码目录如下:


.|____component| |____a.js| |____package.json|____package.json|____index.js


文件内容如下:


// component/a.jslet a = 'This is component a';console.log('aaaa');module.exports = a;
// component/package.json{  "type": "commonjs" // 也可以不设置type字段}
// index.jsimport a from './component/a.js';console.log(a);
// package.json{  ...  "type": "module",  ...}


执行node index.js,代码可以正确执行,输入如下:


(node:81677) ExperimentalWarning: The ESM module loader is experimental.aaaaThis is component a


写在后面


本文通过示例,简单介绍了Node.js中ES Module的相关使用方法,更多详细介绍请参考官方文档:

https://nodejs.org/api/esm.html

相关文章
|
5月前
|
缓存 JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
|
5月前
|
JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(四)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(四)
|
2月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
46 3
|
1月前
|
存储 JavaScript 前端开发
[JS] ES Modules的运作原理
【9月更文挑战第16天】ES Modules(ECMAScript Modules)是 JavaScript 中的一种模块化开发规范,适用于浏览器和 Node.js 环境。它通过 `export` 和 `import` 关键字实现模块的导出与导入。模块定义清晰,便于维护和测试。JavaScript 引擎会在执行前进行静态分析,确保模块按需加载,并处理循环依赖。ES Modules 支持静态类型检查,现代浏览器已原生支持,还提供动态导入功能,增强了代码的灵活性和性能。这一规范显著提升了代码的组织和管理效率。
|
3月前
|
存储 JavaScript 算法
若依修改-Starting development server...10% building 0/1 modules 1 active ...-node
若依修改-Starting development server...10% building 0/1 modules 1 active ...-node
|
5月前
|
JavaScript 前端开发 API
js和ES的关系
js和ES的关系
93 10
|
5月前
|
缓存 JavaScript 前端开发
JavaScript模块化:CommonJS与ES Modules的对比与使用
【4月更文挑战第22天】本文探讨了JavaScript模块化的两种规范——CommonJS和ES Modules。CommonJS适用于Node.js,通过`require`同步加载模块,而ES Modules(ES6模块)用于前端,支持异步加载和静态导入导出。CommonJS有缓存,ES Modules无缓存。在选择时,Node.js环境常用CommonJS,但趋势正转向ES Modules,前端项目推荐使用ES Modules以利用其优化性能的优势。
|
5月前
|
JavaScript 前端开发 开发者
深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)
|
5月前
|
JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(三)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(三)
|
5月前
|
JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(二)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(二)