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 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
13 3
|
19天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
17 4
|
23天前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
19 1
|
2天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
8 0
|
26天前
|
前端开发 JavaScript 小程序
JavaScript的ES6中Promise的使用以及个人理解
JavaScript的ES6中Promise的使用以及个人理解
15 1
|
27天前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
34 2
|
24天前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
28 0
|
24天前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
19 0
|
29天前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
85 2