关于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-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的源码

原文地址:https://www.cnblogs.com/HYZhou2018/p/11159271.html

时间: 2024-11-09 07:07:26

关于common.js里面的module.exports与es6的export default的思考总结的相关文章

深入理解js里面的this

闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服.扫扫地,实在不行就拿起手边的书看.照我以前的习惯,我除了上课时间可能看书,其他的时间是完全看不进的,所以觉得这也是自己进步的地方. 最近自己想开始学习前端工程师现在最流行的东西,nodejs,听说可以写服务端.听说是事件驱动.听说...听说了很多很多关于它的好,所以我也决心要好好学这个.推荐我收集的

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

1. "闭包就是跨作用域访问变量." [示例一] var name = 'wangxi' function user () { // var name = 'wangxi' function getName () { console.log(name) } getName() } user() // wangxi 在 getName 函数中获取 name,首先在 getName 函数的作用域中查找 name,未找到,进而在 user 函数的作用域中查找,同样未找到,继续向上回溯,发现在

node.js里面的import

当在react项目中,使用import时,会把node_modules里面对应的依赖包导入到相应的位置.原理是:当执行import命令时,会先查找当前同级目录下的node_modules文件里面的对应依赖包,假如找到了,比如是ajv依赖包,然后找ajv依赖包下的main文件就ok了,如果没有main文件,就找ajv依赖包下的index.js文件.如果当前同级目录的node_modules文件里没有对应的依赖包,就继续往上级目录的node_modules文件进行搜索,依此类推,就ok了.

JS里面的DOME

一.JS中的DOM0事件模型      1.内容模型:直接将函数名作为HTML标签的某个事件属性的属性值;                例  rg:<button onlick="func()">按钮</button> 2.脚本模型:在JS脚本中通过事件属性进行绑定 : 例 eg:window.onlead = function(){}    但是它也有局限性即:同一个节点只能绑定一个同类型事件 二.JS中的DOM2事件模型     1.添加事件绑定:btn1

JS里面的call, apply以及bind

参考了这篇文章:http://www.tuicool.com/articles/EVF3Eb 给几个例子 function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1); 这个运行是什么呢?答案: 4. 运行的是add. 因为call是运行的调用者.将第一个参数作为this参数来使用. 再来一个例子 function Animal(){ this.name = "Animal";

js 里面的 function 与 Function

function 是 js 的标识符 Function 是 js 里面的一个 构造函数 1.new function 与 new Function 的区别 new 运算符在 js 里面是 创建一个自定义的对象的实例 或者是 一个具有构造函数的本地对象的实例. 语法:new constructor [ ( [ arguments ] ) ] new function() {......} 初始化一个可操作对象,相当于 new function 匿名函数() {......} new Functio

JS里面的innerHTML

1.在输入框输入一句话 2.点击按钮,输入框里面的内容会显示在下面 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML 的属性操作

js里面的cookie保存登录名

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title></title> <script type="text/javascript"> //获取cookie function getCookie(c_name) { if (document.cookie.length > 0)

Js里面的arguments

了解这个对象之前先来认识一下javascript的一些功能: 其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载.Javascrip中国每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素.arguments.length为函数实参个数,arguments.callee引用函数自身. arguments他的特性和使用方法 特性: arguments对象和Functi