1. 程式人生 > >js使用require 和 import 引入依賴的區別?

js使用require 和 import 引入依賴的區別?

       require 和 import,都是為了JS模組化使用。最近專案中,因為多人協同開發,出現了一個專案中同時使用了require 和 import 引入依賴的情況。正常情況下,一個專案中最好是對引入方式做一個規範。下面我們就來看一下require 和 import的區別:

一.require

  require是Commonjs的規範,node應用是由模組組成的,遵從commonjs的規範。用法:

  a.js

function test (args) {
  // body...
  console.log(args);	
}

module.exports = {
  test
};

b.js

let { test } = require('./a.js');

test('this is a test.');

    require的核心概念:在匯出的檔案中定義module.exports,匯出的物件型別不予限定(可為任意型別)。在匯入的檔案中使用require()引入即可使用。本質上,是將要匯出的物件,賦值給module這個物件的exports屬性,在其他檔案中通過require這個方法來訪問exports這個屬性。上面b.js中,require(./a.js) = exports 這個物件,然後使用es6取值方式從exports物件中取出test的值。

二.import

import是es6為js模組化提出的新的語法,import (匯入)要與export(匯出)結合使用。用法:

a.js:

export function test (args) {
  // body...
  console.log(args);	
}

// 預設匯出模組,一個檔案中只能定義一個
export default function() {...};

export const name = "lyn";

b.js:

// _代表引入的export default的內容
import _, { test, name } from './a.js';

test(`my name is ${name}`);

三、commonjs模組與ES6模組的區別

    1.commonjs輸出的,是一個值的拷貝,而es6輸出的是值的引用;

    2.commonjs是執行時載入,es6是編譯時輸出介面;