Node.JS與 ES 6中 模塊的 export 與 import

在 Node.JS中

1、Node.js 提供了 exports 和 require 兩個對象,其中 exports 是模塊公開的接口, require 用於從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。require是“運行時加載”,加載模塊得到對應的對象。

2、require 不會重複加載模塊,也就是說無論調用多少次 require, 獲得的模塊都是同一個(實例)。Node.js 與 ES6 模塊輸出的都是值的引用。

require獲取模塊的接口與其對應的值是動態綁定關係, 即通過該接口, 可以取到模塊內部實時的值。

3、exports.Hello表示通過 exports 對象把 Hello 類 export,將exports.Hello指向了 Hello, 然後 在其他文件中需要通過 require('./singleobject').Hello 來獲取 Hello 對象,因爲require('./singleobject')就獲得singleobject模塊的exports對象。而exports.Hello指向了Hello。所以require('./singleobject').Hello 能夠獲取Hello對象。

//singleobject.js

function Hello() {
    var name;
    this.setName = function (thyName) {
        name = thyName;
    };

    this.sayHello = function () {
        console.log('Hello ' + name);
    };
};
exports.Hello = Hello;


4、module.exports = Hello; 直接將 exports對象指向Hello,那麼require('./hello')就直接獲得了Hello對象。

//hello.js
function Hello() {
    var name;
    this.setName = function(thyName) {
        name = thyName;
    };
    this.sayHello = function() {
        console.log('Hello ' + name);
    };
};
module.exports = Hello;
//gethello.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();


不可以通過對 exports 直接賦值代替對 module.exports 賦值。
exports 實際上只是一個和 module.exports 指向同一個對象的變量,
它本身會在模塊執行結束後釋放,但 module 不會,因此只能通過指定
module.exports 來改變訪問接口。

參考:Node.js開發指南
 

在 ES 6中,

1、模塊不是對象。加載模塊是“編譯時加載”或者靜態加載, 即 ES6 可以在編譯時就完成模塊加載。

2、export 命令用於規定模塊的對外接口, import 命令用於輸入其他模塊提供的功能。
3、export 命令除了輸出變量, 還可以輸出函數或類

4、export 命令規定的是對外的接口, 接口名必須與模塊內部的變量建立一一對應關係

// 報錯
var m = 1 ;
export m;

通過變量 m , 還是直接輸出1。1 只是一個值, 不是接口。 正確的寫法:

// 寫法二
var m = 1 ;
export {m};


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章