资讯专栏INFORMATION COLUMN

利用 std/esm 在 Node.js 开发中使用 ES Modules

Anshiii / 1653人阅读

摘要:利用在开发中使用整理自,从属于笔者的现代开发语法基础与实践技巧系列中的模块化与构建章节。本文主要介绍了如何利用第三方库在应用中顺滑地使用语法。

利用 std/esm 在 Node.js 开发中使用 ES Modules 整理自ES Modules in Node Today!,从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列中的模块化与构建章节。本文主要介绍了如何利用 std/esm 第三方库在 Node.js 应用中顺滑地使用 ES Modules 语法。

利用 std/esm 在 Node.js 开发中使用 ES Modules

随着主流浏览器逐步开始支持 ES Modules 标准,越来越多的目光投注于 Node.js 对于 ESM 的支持实现上;目前 Node.js 使用 CommonJS 作为官方的模块解决方案,虽然内置的模块方案促进了 Node.js 的流行,但是也为引入新的 ES Modules 造成了一定的阻碍。CommonJS 与 ES Modules 模块标准的对比如下:

// CJS
const a = require("./a")
module.exports = { a, b: 2 }

// ESM
import a from "./a"
export default { a, b: 2 }

鉴于 CommonJS 并不兼容于 ES Modules,Node.js 打算引入 .mjs(Modular JavaScript)文件扩展来指明模块解析规则;这个有点类似于目前对于 JSON 文件的解析,如果我们指明了载入 .json 格式文件,Node.js 会自动调用 JSON.parse 方法。Node.js 拟计划在 2020 年发布的 9.x 版本中引入内置的 ESM 支持,详细的 Node.js 中 ESM 实现规范查看 Node.js 官方文档 ES Module Interoperability;而目前主流的办法即是采用 Rollup、Webpack 这样的构建工具或者 Babel 这样的转化工具来进行代码转化。

而近日正式发布的 @std/esm 为我们提供了高性能的 Node.js 中 CommonJS 与 ES Modules 模块间调用,其能够作用于 Node.js 4.x 以上版本;它能够顺滑地集成到现有的 Webpack、Babel 环境中,并且支持不同模块使用不同的依赖版本。不同于目前的解决方案需要是发布编译之后的 CommonJS 格式的文件,[@std/esm] 能够以最小的代价的、按需转化的、动态缓存的方式来进行源代码转化,其基本命令行中的使用方式如下所示:

> require("@std/esm")
@std/esm enabled
> import path from "path";
undefined
> path.join("Hello","World");
"Hello/World"

[@std/esm] 除了会自动识别 .mjs 扩展的文件之外,它还支持任何包含 import/export、Dynamic import、file URI scheme 等语句的文件,典型的用例如下:

// 首先安装依赖
npm i --save @std/esm

// index.js

import hello from "./main.js";

hello();


// main.js
import thing from "./constants.js";

export default function hello() {
console.log(thing);
}

// constants.js

export default "Hello World!";

// 运行文件
node -r @std/esm index.js
// Hello World!

笔者在自己尝试的时候发现 @std/esm 还存在些 Bug,对于缓存代码的处理也并不完善,目前并不建议直接用于生产环境,但是有所了解还是不错的。@std/esm 官方给出的与 Node.js 9 以及 CommonJS 模块的加载时间对比如下,可以发现还是很接近于内建的解决方案性能的:

Loading CJS equivs was ~0.28 milliseconds per module

Loading built-in ESM was ~0.51 milliseconds per module

First @std/esm no cache run was ~1.56 milliseconds per module

Secondary @std/esm cached runs were ~0.54 milliseconds per module

延伸阅读

更多 Node.js 相关资料参考 这里

多个提高Node.js应用吞吐量的小优化技巧介绍

JavaScript 语法树与代码转化

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87246.html

相关文章

  • 前端每周清单:Node.js 微服务实践,Vue.js 与 GraphQL,Angular 组件技巧

    摘要:前端每周清单第期微服务实践,与,组件技巧,攻防作者王下邀月熊编辑徐川前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。 前端每周清单第 26 期:Node.js 微服务实践,Vue.js 与 GraphQL,Angular 组件技巧,HeadlessChrome 攻防 作者:王下邀月熊 编辑:徐川...

    wall2flower 评论0 收藏0
  • 前端每周清单半年盘点之 Node.js

    摘要:前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。对该漏洞的综合评级为高危。目前,相关利用方式已经在互联网上公开,近期出现攻击尝试爆发的可能。 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢...

    kid143 评论0 收藏0
  • 2017-08-13 前端日报

    摘要:前端日报精选从源码看数组排序的诡异问题显示网格和隐式网格的区别打包工具完全入门指南使用之前要在里学的件事工作机制第部分中文深入理解中的代码片段,你能猜对几个掘金深入理解笔记中的类深入理解笔记迭代器和生成器最新版构建分享小王子 2017-08-13 前端日报 精选 从 V8 源码看 JS 数组排序的诡异问题显示网格和隐式网格的区别JS打包工具rollup——完全入门指南使用 Redux ...

    Eastboat 评论0 收藏0
  • package.json 非官方字段集合

    摘要:非官方字段集合官方字段请参考。下面介绍的是非官方字段,也就是各种工具定义的相关字段。详细参考相关字段设置项目的浏览器兼容情况。相关字段测试库。相关字段代码检查与优化。 package.json 非官方字段集合 package.json 官方字段请参考 https://docs.npmjs.com/files/package.json。下面介绍的是非官方字段,也就是各种工具定义的相关字段...

    denson 评论0 收藏0
  • webpack4.x升级摘要

    摘要:以为例,编写来帮助我们完成重复的工作编译压缩我只要执行一下就可以检测到文件的变化,然后为你执行一系列的自动化操作,同样的操作也发生在这些的预处理器上。的使用是针对第三方类库使用各种模块化写法以及语法。 showImg(https://segmentfault.com/img/bVbtZYK); 一:前端工程化的发展 很久以前,互联网行业有个职位叫做 软件开发工程师 在那个时代,大家可能...

    levinit 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<