在 Node.js 中,原生并不支持 ES6 的 import 语句来引入模块。

不过从 Node.js v12 开始,通过实验性功能(--experimental-modules)可以使用 .mjs 扩展名的文件来启用对 ES6 模块的支持,并使用 import 语句。

新版本 Nodejs 已移除了 --experimental-modules

但是,在生产环境中,为了确保兼容性和广泛支持,通常会借助工具如 Babel 或 TypeScript 进行转译,将 ES6 模块语法转换为 Node.js 原生支持的 CommonJS (require) 语法。

如果你想在 Node.js 环境中直接使用 import 语句,你需要满足以下条件:

  Node.js 版本要求:使用支持 ES6 模块的 Node.js 版本,并且可能需要开启实验性特性标志。
  文件扩展名:对于使用 import 的模块文件,通常应使用 .mjs 扩展名以指示 Node.js 使用 ES6 模块解析器。
  配置启动参数:启动 Node.js 应用时添加 --experimental-modules 参数以启用 ES6 模块支持。

例如,在满足以上条件的情况下,你可以这样导入和导出模块:

// 导出模块 (module.mjs)
export const myValue = 'Hello, world!';

// 导入模块 (main.mjs)
import { myValue } from './module.mjs';
console.log(myValue);

然后运行 main.mjs 文件:

  node main.mjs

然而,由于 Node.js 对于原生支持 ES6 模块仍在不断发展和完善中,实际开发中往往还是推荐使用工具进行编译转换。

以 .mjs 结尾的文件总是作为 ESM 模块加载,且不受最近的父 package.json 的影响。

同样的,以 .cjs 结尾的文件总是作为 CommonJS 加载,且不受最近的父 package.json 的影响。

Node.js开箱即支持以下情况:

"import" - 当包通过 import 或 import() 加载,或通过 ECMAScript 模块加载器的任何顶层导入或解析操作加载时,该条件就会匹配。无论目标文件的模块格式如何,都适用。 "import" 总是与 "require" 互斥。

"require" - 当包通过 require() 加载时匹配。被引用的文件应该可以用 require() 加载,尽管该条件与目标文件的模块格式无关。预期的格式包括 CommonJS、JSON 和本地插件,但不包括 ES模块,因为 require() 并不支持它们。 "require" 总是与 "import" 互斥。

"node" - 匹配任何 Node.js 环境。可以是 CommonJS 或 ESM 模块文件。这个条件应该总是在 "import" 或 "require" 之后。

"default" - 默认的降级条件。可以是一个 CommonJS 或 ESM 模块文件。这个条件应该总是排在最后。

Link: https://www.cnblogs.com/farwish/p/18071700

[GPT] nodejs 什么情况下可以使用 import 来引入 export 的模块的更多相关文章

  1. idea-----Idea在不关闭project的情况下进行Import Project

    Idea在不关闭project的情况下进行Import Project 引用:https://blog.csdn.net/qq_28198181/article/details/83069667

  2. RPC 框架要实现这个功能,我们可以使用泛化调用。那什么是泛化调用呢?我们带着这个问题,先学习下如何在没有接口的情况下进行 RPC 调用。

    RPC 框架要实现这个功能,我们可以使用泛化调用.那什么是泛化调用呢?我们带着这个问题,先学习下如何在没有接口的情况下进行 RPC 调用.

  3. 高并发情况下分布式全局ID

    1.高并发情况下,生成分布式全局id策略2.利用全球唯一UUID生成订单号优缺点3.基于数据库自增或者序列生成订单号4.数据库集群如何考虑数据库自增唯一性5.基于Redis生成生成全局id策略6.Tw ...

  4. @Spring Boot程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码

    前言 这篇其实是对一年前的一篇文章的补坑. @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码 当时,就是在spring mvc应用里定义一个 ...

  5. RabbitMQ-如何保证消息在99.99%的情况下不丢失

    1. 简介 MQ虽然帮我们解决了很多问题,但是也带来了很多问题,其中最麻烦的就是,如何保证消息的可靠性传输. 我们在聊如何保证消息的可靠性传输之前,先考虑下哪些情况下会出现消息丢失的情况. 首先,上图 ...

  6. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  7. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

  8. 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

  9. PHP通过加锁实现并发情况下抢码实现

    需求:抢码功能 要求: 1.特定时间段才开放抢码: 2.每个时间段放开的码是有限的: 3.每个码不允许重复: 实现: 1.在不考虑并发的情况下实现: function get_code($len){ ...

  10. 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案

    问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...

随机推荐

  1. PAT 甲级【1009 Product of Polynomials】

    /* 系数为0不输出 貌似runtime异常也显示答案不正确*/ import java.io.BufferedReader; import java.io.IOException; import j ...

  2. django(cookie与session、中间件、auth模块)

    一 cookie与session 1 发展史及简介 """ 发展史 1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的 eg:新闻.博客.文章 2.出现了 ...

  3. URLDNS利用链

    原理 Java URLDNS链是通过readObject反序列化+DNS查询来确认反序列化利用点的存在.该利用链具有如下特点: [1] 只能发起 DNS 请求,不能进行其它利用. [2] 不限制 jd ...

  4. 记录--页面使用 scale 缩放实践

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近接到一个任务,需要把页面放大1.5倍显示.这里使用 css 里的 transform: scale(1.5) 来实现. documen ...

  5. 记录--js小练习(弹幕、 电梯导航、 倒计时、 随机点名、 购物放大镜)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 DOM小练习 弹幕 电梯导航 倒计时 随机点名 购物放大镜 1.弹幕 效果预览 功能:输入弹幕内容,按下回车显示一条弹幕(弹幕颜色.字体随 ...

  6. 记录-JS简单实现购物车图片局部放大预览效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.实现效果 二.代码实现 代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG  ...

  7. linux学习指令与现有环境解决问题笔记

    linux学习指令与现有环境笔记 注意:我将pytorch和cuda安装在了pytorch这个虚拟环境中 pytorch安装及注意问题 注意版本对应,稳定版2.0.1对应cuda11.7,别按错了 按 ...

  8. Redis高可用之战:主从架构

    ★ Redis24篇集合 1 主从模式介绍 在笔者的另外两篇文章 <Redis系列:RDB内存快照提供持久化能力>.<Redis稳定性之战:AOF日志支撑数据持久化>中,我们介 ...

  9. KingbaseES运维案例之---服务进程(backend process)终止

    ​ 案例说明: 如下图所示:KingbaseES服务进程结构 KingbaseES使用客户端/服务器的模型. 对于每个客户端的连接,KingbaseES主进程接收到客户端连接后,会为其创建一个新的服务 ...

  10. NOIP 2007 普及组

    NOIP 2007 普及组(DONE) 注:本文不附原题,可上Luogu有题对照查询. 1.CPU:即中央处理器,由运算器+控制器+寄存器组成,不含主板(但CPU是装在主板上的). 2.二维表即常见的 ...