nodejs中 import 與 async

waht_i發表於2019-04-11

測試版本node v10.15.3

//async.js
;(async function a() {
  let res = await new Promise(function(resolve) {
    setTimeout(function() {
      resolve(2)
    }, 1000)
  })
  console.log(res)
})()
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node async.js
2
//隔1秒輸出了2,表明在v10.15.3中可以使用 async和await

預設支援async/await了
看了一下async/await的預設支援是從v7.6.0版本開始的,所以現在應該能放心使用


再測試一下import

//import.js

import { zs } from './cons'//匯入js檔案時不用加擴充名
console.log(zs)
//cons.js
let zs = {
  name: '張三'
}
export { zs }
$ node import//執行js檔案也預設不需要加擴充名:.js

報錯

所以這版本還是不支援import 和export/export default

想要使用就得用babel,babel的方法使用百度有好多這裡就不寫了


還有一種方法是使用官網的寫法:
將執行的js檔案擴充名變為 mjs
如現在將 import.js 改為 import.mjs
並在node命令中 加上 --experimental-modules指令
如下:

//import.mjs
import { zs } from './cons'
console.log(zs)
//cons.js
let zs = {
  name: '張三'
}
export { zs }
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node --experimental-modules import        //mjs檔案在執行指令中依舊不需要加字尾

報錯了

報錯了,原因是每個使用了 import/export的依賴檔案和被執行檔名都需要把擴充名改為.mjs,而不是隻是被執行的檔案需要改mjs如下

//import.mjs
import { zs } from './cons'
console.log(zs)
//cons.mjs
let zs = {
  name: '張三'
}
export { zs }
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node --experimental-modules import        //mjs檔案在執行指令中依舊不需要加字尾
{ name: '張三' }

執行成功

相關文章