栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

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

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

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

符合预期的CoyPan
CoyPan,BAT某厂符合预期的FE,正努力成为一名出色的工程师

写在前面

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.mjs
let a = 'This is component a';
export default a;

// index.mjs
import 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.js
let a = 'This is component a';
export default a;

// index.js
import 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内置模块,例如fs和path,均支持上述三种方式来引用。

import 与 Commonjs

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

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

例如代码目录如下:

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

文件内容如下:

// component/a.cjs
let a = 'This is component a';
console.log('aaaa');
module.exports = a;

// index.js
import a from './component/a.cjs'; 
console.log(a);

// package.json
{
  ...
  "type": "module",
  ...
}

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

(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a
  • 模块拥有自身的package.json,没有设置"type": "module"或设置"type": "commonjs"。
    例如代码目录如下:
.
|____component
| |____a.js
| |____package.json
|____package.json
|____index.js

文件内容如下:

// component/a.js
let a = 'This is component a';
console.log('aaaa');
module.exports = a;

// component/package.json
{
  "type": "commonjs" // 也可以不设置type字段
}

// index.js
import a from './component/a.js';
console.log(a);

// package.json
{
  ...
  "type": "module",
  ...
}

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

(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a
写在后面

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

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

符合预期的CoyPan
CoyPan,BAT某厂符合预期的FE,正努力成为一名出色的工程师

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

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

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