node支持ES module (import) 的三种方式

这篇具有很好参考价值的文章主要介绍了node支持ES module (import) 的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

作为前端开发者,在日常开发中,常常会使用 import 语法引入模块。但是在大多人前端开发者印象中, Node 默认是不支持 importexport 的,更多是使用requiremodule.exportsexports.xxx 来进行文件导入导出。


注意:

本次实验过程中,运行 test.js (入口文件)文件并不是直接使用 node test.js,而是使用自定义命令 use-import-in-node.

具体如下:

  1. 目录结构
    node支持ES module (import) 的三种方式
  2. package.json 中添加 bin属性
    node支持ES module (import) 的三种方式
  3. test.js 第一行添加 #!/usr/bin/env node (参考文章)
    node支持ES module (import) 的三种方式
  4. 运行 npm link
  5. 就可以全局使用 use-import-in-node 命令了,和直接使用 npm 一样。直接运行 use-import-in-node 就等同于 node test.js(参考文章)
    node支持ES module (import) 的三种方式
    关于自定义命令为什么可以直接执行,不理解的可以看我的另一篇文章,从操作系统命令的使用层次来理解脚手架(vue-cli)命令(vue)
    如果不想使用这种方式,全程使用node(babel-node)执行 test.js文件也可

一、通过 babel-node

1. 安装 babel-node

babel-node 命令并非独立安装,在 Babel 7.0 以前,通过安装 babel-cli 包获得。而在 Babel 7.0 以后,babel 的模块被被拆分,需要安装 @babel/core @babel/node 两个包来获取。

  • babel 7.x 以前的写法
 npm i -g babel-cli
  • babel 7.x 以后的写法
 npm i -g @babel/core @babel/node

2. 安装 presets 并配置 .babelrc 文件

npm i @babel/preset-env -g

node支持ES module (import) 的三种方式
提示:由于我babel有关的包都是全局安装的,所以.babelrc所在目录下没有package.json 文件

3. 文件结构和代码

node支持ES module (import) 的三种方式

4. 修改test.js执行环境

node支持ES module (import) 的三种方式
从图中可以看到,运行 use-import-in-nodebabel-node test.js 效果一样


二、使用webpack

1. 安装webpack相关包

npm i webpack  webpack-cli -g

2. 配置webpack

(1)配置打包命令

node支持ES module (import) 的三种方式我们最终需要的是打包后的代码。

(2)配置webpack.config.js

  1. package.json 同级目录下新建 webpack.config.js 文件

  2. 具体配置很简单,如下图node支持ES module (import) 的三种方式
    提示:target默认值是 web , 如果你要用import导入node内置库,比如path、fs等,需要设置为node

  3. 运行 npm run build 生成打包文件
    node支持ES module (import) 的三种方式

    注意在哪里执行的打包命令

3. 修改test.js执行环境并执行

node支持ES module (import) 的三种方式
从图中可以看到,运行 use-import-in-nodenode test.js 效果一样
注意:这里require的文件是打包后的文件/dist


三、node原生支持

其实 node 原生也是支持 es module ,就是 importexport 来导入导出的。其中有几个需要注意的点:

  • 所有的文件名后缀需要改成.mjs
  • 导入文件路径的时候需要输入完整的文件名,不能省略.mjs。(省略.mjs后缀名后默认导入js文件,这是会报找不到文件的错误)
  • 所有的导入导出都必须用ES module规范,使用 ComonJs会报错
  • 有些东西,例如__dirname__filename无法使用(这是在调用require的时候注入的)

但是在node版本v12.0.0 之前,是不支持直接用node执行.mjs 文件的,需要加上·--experimental-modules 选项,因为这时还是一个实验性的功能,所以还会爆出提示信息;在node版本v12.0.0 之后,可以直接用node执行.mjs 文件。(具体见下方截图)

1. demo代码

node支持ES module (import) 的三种方式

2. 运行 test.mjs文件

(1)node版本大于等于v12.0.0

node支持ES module (import) 的三种方式

(2)node版本小于v12.0.0

node支持ES module (import) 的三种方式


附上源码链接

github的master分支文章来源地址https://www.toymoban.com/news/detail-406159.html

到了这里,关于node支持ES module (import) 的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: E:\works\large-file-uploader\node_module

     使用npm run dev启动vite项目报错: 原因:nodejs版本太低 vue3+vite项目需要使用nodejs16及以上版本才能正常运行,修改nodejs版本后成功启动

    2024年02月06日
    浏览(80)
  • vue3+vant Failed to resolve import “E:/code3/jianmu-user-yd/node_modules/vant/lib/vant/es/icon/style

    Failed to resolve import \\\"E:/code3/jianmu-user-yd/node_modules/vant/lib/vant/es/icon/style\\\" from \\\"srcmain.js\\\". Does the file exist? 解决办法:在vite.config.js中配置:

    2024年02月06日
    浏览(41)
  • ES中的三种查询

    Es有三种查询方式,不知道你平时工作中用到的是哪种呢? 一、from+Size 1、深度分页或者size特别大的时候,会出现deep pagination问题.并且因为Es自身的保护机制(max_result_window是10000),如果查出来的数据量大于10000的就会报错. 2、该查询的实际原理类似于mysql中的limit,比如查询第10001条数

    2023年04月09日
    浏览(38)
  • python操作ES的三种办法

    2024年02月12日
    浏览(39)
  • ES6模块介绍—module的语法import、export简单介绍及用法

    模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export输出该变

    2024年02月05日
    浏览(40)
  • JavaScript的三种引用方式

    1.1、标签引用(或嵌入式) 使用 script 标签将 JavaScript 代码嵌入到 HTML 页面中。可以放置在 head 或 body 中。 显示效果: 1.2、 文件引用 (外链式) 将 JavaScript 代码编写在一个独立的 .js 文件中,并通过 script 标签的 src 属性引入到 HTML 页面中。 显示效果: 1.3、行内式 直接在

    2024年02月02日
    浏览(49)
  • 线程创建的三种方式

    目录 1. Thread类 2. Runnable接口 3. Callable接口 4. 线程的生命周期 新建  就绪 运行 阻塞 等待 结束 继承Thread类的方式创建线程 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务 创建Thread类的子类,即创建了线程对象 调用线程对象的

    2024年02月09日
    浏览(44)
  • Debezium的三种部署方式

    debezium 有下面三种部署方式,其中最常用的就是 kafka connect。 kafka connect 一般情况下,我们通过 kafka connect 来部署 debezium,kafka connect 是一个框架和运行时: source connectors:像 debezium 这样将记录发送到 kafka 的source connector sink connectors:将记录从 kafka topic传播到其他系统的 sin

    2024年02月10日
    浏览(44)
  • 单点登录的三种方式

    因为一个项目种有多个服务组成,每个服务都是独立的,如果登录的时候在一个服务种,那么其他的服务是显示不了的,所以就有了单点登录。 所谓单点登录就是一处登录,处处登录。 第一种方式:session广播机制实现 第一种当时的的原理是session的复制,就是在多个服务中

    2024年02月15日
    浏览(50)
  • 验证合约的三种方式

    使用truffle插件: https://github.com/rkalis/truffle-plugin-verify truffle run verify 合约名称@合约地址 --network 网络名称 --debug 注意:需要开启VPN,然后给CMD也设置代理,否则CMD无法访问外网会验证失败 (每次新开CMD都要执行) 在etherscan上手动上传 1、合约文件如果有导入的外部合约,需

    2023年04月22日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包