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

目录
相关文章
|
10月前
|
JavaScript 前端开发
在Node.js中,如何合理使用模块来避免全局变量的问题?
在Node.js中,如何合理使用模块来避免全局变量的问题?
351 71
|
JavaScript 数据可视化
JS如何优雅的实现模块自动滚动展示
【8月更文挑战第22天】JS如何优雅的实现模块自动滚动展示
433 1
JS如何优雅的实现模块自动滚动展示
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
149 2
|
缓存 JavaScript 前端开发
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
JavaScript模块化开发:ES6模块与CommonJs的对比与应用
355 2
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
150 0
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
138 0
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
371 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
286 1
JavaScript中的原型 保姆级文章一文搞懂
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
180 0