js使用require 和 import 引入依賴的區別?
阿新 • • 發佈:2019-01-04
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是編譯時輸出介面;