JS模块化规范对比以及在Node.js的实现

文章目录

    • 写在前面
    • JavaScript模块化的规范
    • Node.js 的模块化实现
    • AMD or CMD 代码示例
    • ES6模块化标准以及在Node.js的使用

写在前面

关于JavaScript的模块化的需求来源以及相关标准可以参考以下两篇:

Javascript模块化编程系列一: 模块化的驱动
Javascript模块化编程系列二: 模块化的标准化(CommonJS & AMD)

此处,在代码层演示不同标准的代码 以及在Node.js演示的效果。

JavaScript模块化的规范

  • Node.js 遵循 CommonJS
  • RequireJS 遵循AMD
  • Seajs 遵循 CMD
  • ES6, ECMAScript 6 是JavaScript的下一代标准规范,对模块化也有一套定义
    在JavaScript中,一个模块,基本上是一个独立的文件,

Node.js 的模块化实现

Node.js遵循CommonJS规范定义模块,定义的方式是:

  • 使用module.exports定义模块
  • 使用require 导入模块

这里建立两个文件, sub.js定义一个模块;main.js导入并使用sub.js定义的模块

sub.js

 module.exports={
     
    myVar:'Oscar',
    myFunc:function(){
      return 'Oscar'}
}

main.js

var sub = require('./sub');
var s = sub.myFunc();
console.log(s);

以上的示例是调用在模块中定义的某个函数, 在控制台打印函数的返回值。

测试方式: 在命令行运行 node main.js
在这里插入图片描述

AMD or CMD 代码示例

相比CommonJS , AMD/CMD 只是在最外层使用define 包装了一层。
sub.js

define(function (require, exports, module) {
     
    module.exports = {
     
        myVar: 'Oscar',
        myFunc: function () {
      return 'Oscar' }
    }
});

main.js

define(function (require, exports, module) {
     
    var sub = require('./sub');
    var s = sub.myFunc();
    console.log(s);
});

ES6模块化标准以及在Node.js的使用

ES6标准使用export 和 import 导出和导入模块 ,早期的Node.js 没有支持这个标准, 不过Node.js 9之后提供了一个实验模块, 可以直接使用 export/import , 但是文件名后缀需要是 .mjs。

sub.mjs

var myVar = 'Oscar';
function myFunc() { return 'Oscar' }

export {myVar,myFunc}

main.mjs


import {myVar,myFunc} from './sub.mjs'

var s = myFunc();
console.log(s);

注意: 运行的命令需要加–experimental-modules选项:

node --experimental-modules main.mjs

在这里插入图片描述
这里会有一个警告:ExperimentalWarning: The ESM module loader is experimental.
意思就是这个模组还处在实验阶段,用用完可以,正式环境不建议使用。 在正式环境中,结合webpack可以正常使用export和import。

你可能感兴趣的:(Node.js学练用,Vue,130-Web语言,模块化,Node.js,ES6)