背景

公司项目需要裁切功能,基于第三方图片裁切组件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的思考总结的更多相关文章

  1. NodeJS的exports、module.exports与ES6的export、export default深入详解

    前言 决定开始重新规范的学习一下node编程.但是引入模块我看到用 require的方式,再联想到咱们的ES6各种export .export default. 阿西吧,头都大了.... 头大完了,那 ...

  2. nodejs里的module.exports和exports的关系

    关于node里面的module.exports和exports的异同,网上已经有很多的资料,很多的文章,很多的博客,看了很多,好像懂了,又好像不懂,过几天又不懂了...大致总结是这样的: //下面这种 ...

  3. nodejs里的module.exports和exports

    引 在node.js中我们可以使用module.exports和exports导出模块,设置导出函数.数组.变量等等 为什么可以用这两个模块? 或者直接问,node.js的模块功能是怎么实现的. 这样 ...

  4. Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别

    1.module.exports  module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...

  5. 深入理解js里面的this

    闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...

  6. js里面的Object基本

    属性名必须是字符串,非字符串对象不能用来作为一个对象属性的键,任何非字符串对象,包括number,可通过toString()方法,类型转换成一个字符串1 1,Object基本格式 <script ...

  7. 如何才能通俗易懂的解释js里面的‘闭包’?

    1. "闭包就是跨作用域访问变量." [示例一] var name = 'wangxi' function user () { // var name = 'wangxi' fun ...

  8. 转 node.js里面的http模块深入理解

    问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...

  9. JS里面的call, apply以及bind

    参考了这篇文章:http://www.tuicool.com/articles/EVF3Eb 给几个例子 function add(a,b) { alert(a+b); } function sub( ...

随机推荐

  1. 寻找两个有序数组的中位数 C++实现leetcode系列(四)

    给定两个大小为 m 和 n 的有序数组 nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不 ...

  2. ie浏览器检测不到cookie的问题

    之前做项目由于客户的要求设置缓存必须由后台来设置必须使用cookie(session是没问题的),后期设置时出现了登录页面与首页来还跳转的局面.原因就是首页没检测到登录后的缓存,而后台验证到确实已经是 ...

  3. ECharts 在winform中使用(访问JS)

    ECharts 是百度的一个开源chart 数据统计库,采用html5 + js 编程方式. 有比较好的动态效果,功能很强大.能做出酷弦的效果. ECharts 一般用于web 开发.但winform ...

  4. 新型查询系统impala

    这羊头很酷... Apache Impala是Apache Hadoop的开源本地分析数据库.Impala由Cloudera,MapR,Oracle和Amazon提供. 在Hadoop上进行BI风格的 ...

  5. C#的常见算法(面试)(转)

    一.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m //方法一,通过顺序规律写程序,同时也知道flag标志位的重要性. static int F1(int m) { ; ...

  6. mybatis批量插入、批量更新和批量删除

    转载 https://www.jianshu.com/p/041bec8ae6d3

  7. RocketMQ学习笔记(2)----Broker的集群四种方式

    RocketMQ推荐了几种Broker集群方式,这里的Slave不可写,但可读,类似于Mysql主备方式 1. 单个Master 这是一种风险比较大的集群方式,因为一旦Borker重启或宕机期间,将会 ...

  8. 关于Python的装饰器

    false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {m ...

  9. selenium自动化(二).........................................Demo篇

    二 编写简单代码 简单代码一:   demo1.py 1.from selenium import webdriver driver = webdriver.Chrome() driver.get(& ...

  10. bzoj4551 [HEOI2016]树

    题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...