ES6和Node.js的import和export


記錄一下import和export的幾種寫法。

1.ES6的導入和導出

0.入口文件為index.js,引用add-content.js的內容

1.  export default 方式,直接導出變量

add-content.js的內容如下

1 function write() {
2   document.write('Hello World')
3 }
4 
5 var app = {}
6 app.write = write
7 
8 export default app;

index.js引用要這樣寫

1 import app from './add-content'
2 app.write()

2.  export  { } 方式,適合同時導出多個變量

add-content.js的內容如下

 1 function write() {
 2   document.write('Hello World')
 3 }
 4 
 5 var app = {}
 6 app.write = write
 7 
 8 export {
 9   app
10 }

index.js引用要加上引號,如下

1 import { app } from './add-content'
2 app.write();

3. export與變量聲明的簡寫方式

add-content.js的內容如下

1 function write() {
2   document.write('Hello World')
3 }
4 
5 export var app = {
6   write: write
7 }

index.js引用要加上引號,如下

1 import { app } from './add-content'
2 app.write();

2.nodejs的導入和導出

0.入口文件為index.js,引用mock.js的內容

1.mock.js中使用module.exports方式導出

1 module.exports = {
2   name: 'mock.js',
3   message: 'hello world'
4 }

index.js引用要這樣寫

1 let mock = require('./mock')
2 console.info(mock.name)

2.mock.js中直接使用exports導出

1 exports.name = 'mock'
2 exports.message = 'hello world'

index.js引用要這樣寫

1 let mock = require('./mock')
2 console.info(mock.name)
3 console.info(mock.message)

其原理是將exports指向了module.exports,而module.exports在初始化時是一個空對象。

相當於在導出的文件里面添加了如下代碼:

1 var module = {
2   exports: {}
3 }
4 var exports = module.exports

3.導出時容易出現的兩個錯誤

3.1 給exports賦值,如下

1 exports = {
2   name: 'mock'
3 }

由第2部分知:exports是指向了module.exports,如果重新給exports賦值,它會指向新對象,而module.exports還是空對象。

3.2 module.exports和exports混用

1 exports.name = 'mock'
2 exports.message = 'hello world'
3 
4 module.exports = {
5   getName () {
6     return 'get name function'
7   }
8 }

由於對module.exports進行了賦值,所以exports方式添加的屬性就會丟失,即訪問不到name和message屬性。

 

個人建議使用module.exports = { ... } 導出會比較清晰。

總結一下:

ES6 Moudle:import / export

瀏覽器使用也需要Babel的支持

CommonJS: require / module.exports or exports

node的模塊化規范,瀏覽器使用時需要用browserify解析

AMD: require / defined

是requireJS的規范 define(['./a', './b'], function(a, b) {  //... })

 require是同步導入,支持動態導入,是值拷貝,導出值不會影響導入值;

import是異步導入,導入值會隨導出值變化

備忘~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM