node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)

简介: node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)

JavaScript 有两种模块化规范:

  1. CommonJS模块化规范——使用require()导入模块,module.exports导出模块
  2. ES6模块化规范——使用import导入模块,export 导出模块

两种模块化规范不兼容!(两种语法不能在同一个文件中使用,除非用babel转义)

CommonJS模块化规范

方式一【适用于模块只对外输出一个方法】

导出模块

//a.js
 
function log(str){
  console.log(str);
} 
 
module.exports = log

导入模块

//index.js
 
const log= require('./a.js');
log('你好');//打印 '你好'

require的加载过程图解

方式二【适用于模块对外输出多个方法】

导出模块

//a.js
 
module.exports.log = function(str){
  console.log(str);
} 

导入模块

//index.js
 
const logModule = require('./a.js');
logModule.log('你好');//打印 '你好'


ES6模块化规范

导出模块

// a.js
 
export function log(str) {
    console.log(str)
}

导入模块

// b.js
 
import { log } from './a.js'
 
log('你好')

node.js支持ES6模块化规范的方法

nodejs 默认使用CommonJS模块化规范,若想使用ES6模块化规范,有以下方法:

方法一:将文件后缀名修改为.mjs

node.js对.mjs文件总是使用 ES6 模块化规范,运行文件时,使用  node  test.mjs

方法二:在package.json文件中,指定type字段为module

若项目中没有package.json文件,则在项目文件夹下新建package.json文件

{
   "type": "module"
}

使用此方法后,所有CommonJS模块化规范的js文件的后缀名需改为.cjs

方法三:安装babel

使用babel将js文件编译成node.js支持的commonjs格式的代码。

安装依赖

npm i babel-register babel-preset-env -D

项目目录下新建babel的配置文件 .babelrc

{
  "plugins": [
    "transform-es2015-modules-commonjs"
  ]
}


在项目启动文件中,引入babel

require('babel-register')

完整范例代码

目录结构

│  .babelrc
│  package.json
└─src
        a.js
        index.js
        print.js

index.js

require('babel-register')
require('./print')
import a from './a'

a.js

console.log('aaa')

运行index.js

node index.js

目录
相关文章
|
8月前
|
JavaScript 前端开发
在Node.js中,如何合理使用模块来避免全局变量的问题?
在Node.js中,如何合理使用模块来避免全局变量的问题?
311 71
|
8月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
287 18
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
277 58
|
10月前
|
JavaScript 前端开发 网络架构
ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南
解构赋值是一个强大且灵活的工具,它使得从数组和对象中提取数据变得更加简单和直观。通过掌握解构赋值的基本语法和实践,你可以写出更加简洁、可读性更强的代码。在实际项目中,解构赋值广泛应用于函数参数处理、变量交换、嵌套结构操作等场景,极大地提升了代码的灵活性和简洁度。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
197 5
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
507 4
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
191 1
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
388 0
|
缓存 JavaScript 前端开发
Node.js模块化的基本概念和分类及使用方法
Node.js模块化的基本概念和分类及使用方法
292 0
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
129 0