關於common.js里面的module.exports與es6的export default的思考總結


背景

公司項目需要裁切功能,基於第三方圖片裁切組件vue-cropper(0.4.0版本),封裝了圖片裁切組件(picture-cut)(放在公司內部組件庫,僅限於公司內部使用)

在vue-cropper從0.4.0更新到0.4.4后,picture-cut組件使用裁切功能時報錯

[Vue warn]:Failed to mount component:template or render function not defined

vue-cropper0.4.0的index.js文件導出方式如下

var vueCropper = require('./vue-cropper')
module.exports = vueCropper

vue-cropper0.4.4的index.js文件導出方式如下

import VueCropper from './vue-cropper'
 

const install = function(Vue) {
Vue.component('VueCropper', VueCropper);
}
 

#istanbul ignore if
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
}
 

export { VueCropper }
 

export default {
version: '0.4.4',
install,
VueCropper
}

vue-cropper0.4.0的導入方式如下

import vueCropper from 'vue-cropper'

vue-cropper0.4.4的導入方式如下

import {VueCropper} from 'vue-cropper'

所以在picture-cut組件里引用vue-cropper組件的方式要修改成下面的方式才不報錯

import {VueCropper} from 'vue-cropper'

問題:0.4.0和0.4.4區別有哪些,為什么要這樣使用?

回答:

區別一 0.4.0使用的是common.js的module.exports導出方式,0.4.4使用的是es6的export default導出方式
區別二 0.4.4增加了install函數,感覺這樣做是為了可以在vue的入口文件main.js里面導入,使用use()的方式全局使用

為什么要修改導出方式,不修改導出方式也可以實現導出install函數,在main.js里面導入,使用use()的方式全局使用

針對這個問題,查看了下element-ui的導出方式,發現element-ui的導出方式是module.exports方式且有install函數

查看了ele-vue(公司的組件庫)的導出方式,發現之前使用的是

module.exports.default = module.exports = ...(代碼中這行注釋了)

現在使用的是

export default=...

咨詢得知當時使用common.js的module.exports方式導出組件時報錯,最后使用es6的export default方式導出
但是elemnet-ui組件庫使用的就是common.js的module.exports方式導出,且可以正常使用

查閱資料得知
common.js的語法是運行在node環境的,我們使用的element-ui是在node_modules文件里的,這里面有node環境的,所以使用module.exports的方式導出,在項目中使用不報錯
而我們的組件庫ele-vue不是在node_modules文件里面,沒有node環境,那么在examples文件里面引用module.exports的方式導出的組件時會報錯

針對上面的解釋做如下的驗證
在ele-vue組件里使用module.exports的方式導出(先不管報錯),在項目中使用,發現是正常使用的,那就驗證了上面的結論

知道了上面的區別后解決了在項目中調試ele-vue組件的問題

思路如下:
1.在ele-vue組件庫里面有兩個導出組件的出口,index.js和pack.js
index.js使用的是common.js的module.exports方式導出,webpack入口文件是index.js,出口是dist/hbh-widget.min.js
pack.js用的是es6的export default方式導出組件,在examples文件里的main.js里面引入的的是pack.js

2.在項目調試hbh-widget組件時,將node_modules/@widget/package.json 里面main字段修改為src/pack.js
之后在node_modules/@widget/里面修改相應的組件,改好后在商戶中心直接預覽效果,成功后記得更新hbh-widget的源碼


免責聲明!

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



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