Uncaught TypeError: Cannot assign to read only property 'exports' of object '

1、問題描述

項目之前正常的路由配置是這樣的:

2、路由配置說明

第一種做法:

每個頁面模塊目錄通過一個 index.js 主入口來導出(module.exports)對應的vue文件,然後 router.js 中通過 require 方法去引入資源。

這一做法是沒毛病的,因爲這是組織(webpack 2)允許的。

第二種做法:

如果好好的require不用,非要用 import 那麼請不要和 module.exports 混合服用,因爲這是組織不允許的,此時便會報標題的錯。

(Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>')

第三種做法:

如果你還是要用 import 方法來引入資源的話,你可以放棄 module.exports ,直接引入vue文件路徑,因爲 import 和 export default 是組織運行的。

 

3、結論

綜上,我們要知道組織允許什麼樣的操作,不允許什麼樣的操作!

exports 導出的東西需要 require 引入!

export 導出的東西需要 import 引入!

上面說了那麼多,其實歸根結底就一句話!

在webpack 2中不允許混用 import 和 module.exports

 

4、再廢話幾句


其實正確地去理解這個報錯的話,就一定要去整明白 require 和 import 的區別!

node編程中最重要的思想就是模塊化,import和require都是被模塊化所使用。

1、遵循規範

require / exports 是CommonJS的一部分

import / export 是ES6的新規範,如果要兼容瀏覽器的話必須轉化成es5的語法

2、調用時間

require 是運行時調用,所以require理論上可以運用在代碼的任何地方

import 是編譯時調用,所以必須放在文件開頭

3、本質

require 是賦值過程,其實require的結果就是對象、數字、字符串、函數等,再把require的結果賦值給某個變量

import 是解構過程,但是目前所有的引擎都還沒有實現import,我們在node中使用babel支持ES6,也僅僅是將ES6轉碼爲ES5再執行,import語法會被轉碼爲require

ps:最後,我把項目中的各種index.js 都刪掉了,採用正確做法2來引入對應的文件。棄 require 從 import ~

 

參考鏈接:

Node中沒搞明白require和import,你會被坑的很慘

import和require的區別

vue模塊報錯-1

vue模塊報錯-2

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