关于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的源码
关于common.js里面的module.exports与es6的export default的思考总结的更多相关文章
- NodeJS的exports、module.exports与ES6的export、export default深入详解
前言 决定开始重新规范的学习一下node编程.但是引入模块我看到用 require的方式,再联想到咱们的ES6各种export .export default. 阿西吧,头都大了.... 头大完了,那 ...
- nodejs里的module.exports和exports的关系
关于node里面的module.exports和exports的异同,网上已经有很多的资料,很多的文章,很多的博客,看了很多,好像懂了,又好像不懂,过几天又不懂了...大致总结是这样的: //下面这种 ...
- nodejs里的module.exports和exports
引 在node.js中我们可以使用module.exports和exports导出模块,设置导出函数.数组.变量等等 为什么可以用这两个模块? 或者直接问,node.js的模块功能是怎么实现的. 这样 ...
- Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别
1.module.exports module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...
- 深入理解js里面的this
闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...
- js里面的Object基本
属性名必须是字符串,非字符串对象不能用来作为一个对象属性的键,任何非字符串对象,包括number,可通过toString()方法,类型转换成一个字符串1 1,Object基本格式 <script ...
- 如何才能通俗易懂的解释js里面的‘闭包’?
1. "闭包就是跨作用域访问变量." [示例一] var name = 'wangxi' function user () { // var name = 'wangxi' fun ...
- 转 node.js里面的http模块深入理解
问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...
- JS里面的call, apply以及bind
参考了这篇文章:http://www.tuicool.com/articles/EVF3Eb 给几个例子 function add(a,b) { alert(a+b); } function sub( ...
随机推荐
- Hadoop编译源码
Hadoop编译源码 克隆一个虚拟机 然后一步一步安装就行 安装所需:链接: https://pan.baidu.com/s/1jIZlQmi 密码: gggv 5.1 前期准备工作 1)CentOS ...
- 51nod 1307 绳子与重物 (标记父节点更新即可)
1307 绳子与重物 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci. ...
- 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...
- 《剑指offer》数组中出现次数超过一半的数字
一.题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出 ...
- javascipt入门
一.javascript简介 javascript:(基于对象的编程语言:内部很多对象,我们只需要使用即可,几乎不需要自己创建对象) ECMAScript DOM BOM 存放位置: 建议代码放到ht ...
- 定时清理clientmqueue目录垃圾文件防止占满磁盘空间
RedHat/CentOS 5.8 默认就有sendmail,而6.4默认没有. 手动清理方法: find /var/spool/clientmqueue/ -type f|xargs rm -f ...
- 《Unix环境高级编程》读书笔记 第13章-守护进程
1. 引言 守护进程是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.它们没有控制终端,在后台运行. 本章说明守护进程结构.如何编写守护进程程序.守护进程如何报告出错情况. 2 ...
- 手把手教你如何新建scrapy爬虫框架的第一个项目(上)
前几天给大家分享了如何在Windows下创建网络爬虫虚拟环境及如何安装Scrapy,还有Scrapy安装过程中常见的问题总结及其对应的解决方法,感兴趣的小伙伴可以戳链接进去查看.关于Scrapy的介绍 ...
- 状压DP复习
深感自己姿势水平之蒻……一直都不是很会状压DP,NOIP又特别喜欢考,就来复习一发…… 题目来源 Orz sqzmz T1 [BZOJ4197][NOI2015]寿司晚宴 (做过)质因数分解最大的质因 ...
- rdesktop 脚本
[root@Eren liwm]# cat rdesktop.sh #!/bin/bash -rdesktop -u user 192.168.122.10 -r sound:local -g 10 ...