当前位置: 首页 > article >正文

Vue-cli之库模式以及模块化的魅力 - - 【UMD】

目录

脚本

打包

使用 

拓展

CommonJS:

AMD:

UMD:

ESM:


今天在看组件库的项目中碰到了vue-cli中的库模式,一开始对这种模式比较陌生,怎么说呢,从package.json的script开始,一步步的揭开它神秘的面纱吧~~

  • 脚本

vue-cli-service build --target lib --name myLib [entry]

 vue-cli-service build :打包;

  --target lib :选用库模式(一般组件库选用此模式);

  --name myLib :打包到目标文件夹myLib(比如普通模式的dist);

  [entry] :入口文件(这里一般是给别的项目使用的入口,没定义的话系统默认App.vue)

以上就是脚本的含义,有关于脚本方面的其他问题这篇文章就不做深入探讨,感兴趣的朋友可以去查阅下别的资料。

  • 打包

像我们打包出来生成的是这些产物,当时的我也是不清楚common.js、umd.js和umd.min.js分别代表的是什么东西,然后别的项目怎么使用这些js呢?

官网的表述
  • 使用 

我们就是用的umd.min.js包

就像定义好的协议一样,遵守一定的规则就可以使用我们的组件库了!到目前为止,我们已经在新项目里拿到组件库里面的内容了。

至于前面提到的入口文件的使用(怎样使用组件库),那就是看大家的代码逻辑了。

拓展

产物中涉及到了umd,网上的文章也有很多提及,这里我也来总结一下,温故而知新。

CommonJS:

在js模块化发展历程上最早出现的就是CommonJS,大家一定也用过require/module.exports。它的思想就是把一个个的文件当成一个一个的模块进行分割 ,然后在模块之间通过require/module.exports进行互相调用形成一整个生态系统。到现在NodeJS还是在运用这种方式,因为这种同步的方式是非常适合他们,但在我们浏览器端就不行了,我们往往兼顾的是网络状态也就是异步才是我们的主基调。

AMD:

正因为如此,后来amd诞生了,它的出现正是解决同步的问题,让我们浏览器可以更适合。在RequireJS中我们经常看到,通过define/require的方式实现。现在这种方式用的比较少,大家可以酌情考虑自己的项目情况。

UMD:

它的出现就是为了兼容性,系统会判断当前支持什么环境从而选取哪种模块化方式

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery', 'underscore'], factory);
    } else if (typeof exports === 'object') {
        // Node, CommonJS-like
        module.exports = factory(require('jquery'), require('underscore'));
    } else {
        // Browser globals (root is window)
        root.returnExports = factory(root.jQuery, root._);
    }
}(this, function ($, _) {
    //    methods
    function a(){};    //    private because it's not returned (see below)
    function b(){};    //    public because it's returned
    function c(){};    //    public because it's returned

    //    exposed public methods
    return {
        b: b,
        c: c
    }
}));

兼容上面的CommonJS和AMD,很伟大。

ESM:

现代浏览器通用的一种模块化方式,通过import/export default的方式进行通信。它的好处就是编译期完成了AMD运行时完成的事情,提高了性能。amd导出的是一个完整的对象,然后根据对象拿到它的属性或者方法列表,而esm模块化只是拿到对应的方法或属性(编译期就确定了)。


以上就是模块化一整个的发展历程以及所有代表性的模块化方案。vue-cli为什么会导出umd文件,想必大家应该清楚了吧。 

如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。 


http://www.kler.cn/a/374094.html

相关文章:

  • Javaee:阻塞队列和生产者消费者模型
  • git 怎么保留某个文件夹忽略其下面的所有文件?
  • 【RUOYI3.8.8】框架参考笔记
  • 基于TESSY的单元测试与分类树方法深入解析
  • Vuex store的基本用法
  • 微服务分布式事务
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-9
  • Django后台接口开发
  • 讲一讲 kafka 的 ack 的三种机制?
  • 【全新上线】波克2021天恒系统源码 - 70款娱乐游戏带视频教程支持
  • 分类算法中 XGBoost和LightGBM 的区别简介
  • ubuntu交叉编译zlib库给arm平台使用
  • 校园社团信息管理:Spring Boot技术的最佳实践
  • 自由学习记录(16)
  • 自监督强化学习:对比预测编码(CPC)算法深度解析
  • winSCP使用root账户登录群晖
  • 【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案
  • C++STL——list
  • 论文速读:完全测试时域适应(Test-time Adaptation)目标检测(CVPR2024)
  • python 制作 发货单 (生成 html, pdf)
  • 算法效率的计算
  • C++设计模式结构型模式———适配器模式
  • 分类算法——支持向量机 详解
  • CSS 入门:美化网页的魔法
  • Unity3D URP应用与优化详解
  • idea运行maven项目提示jar不存在,但jar实际上是存在的