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 ~
參考鏈接: