最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 小巧而专注的打包工具rollup

    正文概述 掘金(慕钦c)   2021-03-21   641

    由于以前主要是做web页面开发,所以用的都是webpack来打包。而现在从web页面转到sdk开发,打包工具也从webpack转到了rollup。在此记录一下rollup的特点和使用。

    rollup

    简介:

    Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序

    • 优点: 小巧而专注

    应用场景:

    使用Rollup的开源项目:
    • vue
    • vuex
    • vue-router

    rollup和webpack的对比

    名称简介开源项目
    rollup是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序vue, vuex, vue-routerwebpack是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。element-ui, mint-ui, vue-cli
    从上面使用场景可以大概分析出,Rollup偏向应用于js库,webpack偏向应用于前端工程,UI库;如果你的应用场景中只是js代码,希望做ES转换,模块解析,可以使用Rollup。如果你的场景中涉及到css、html,涉及到复杂的代码拆分合并,建议使用webpack。

    使用

    安装Rollup并创建配置文件,通过如下命令安装
     yarn add --save-dev rollup
    
    在项目的根目录下新建一个新文件 rollup.config.js, 之后再在文件中添加如下代码:
    export default {
      input: './src/index.js',
      output: {
        file: './dist/sdk.min.js',
        format: 'umd'
      }
    }
    

    接下来了解下各个配置的含义:

    input:
    rollup先执行的入口文件
    
    output:
    rollup 输出的文件。
    
    output.format:
    rollup支持的多种输出格式(有amd,cjs, es, iife 和 umd)
    

    我们在package.json代码下 添加如下脚本:

    "scripts": {
      "build": "rollup -c"
    }
    

    现在我们只要在命令行中 输入命令:yarn run build即可完成打包

    接下来看看各个文件代码: src/utils/utils.js:

    export function a(name) {
      const str = `我是${name}!`;
      return str;
    }
    export function b(name) {
      const str = `他是${name}!`;
      return str;
    }
    

    src/utils/addArray.js

    /**
     * @param  {Array} arr
     * @return {Number}
     */
    const addArray = arr => {
      const result = arr.reduce((a, b) => a + b, 0);
      return result;
    };
    export default addArray;
    

    src/index.js

    import { a } from './utils/utils';
    import addArray from './utils/addArray';
    
    const res1 = a('老王');
    const res2 = addArray([1, 2, 3, 4]);
    
    console.log(res1);
    console.log(res2);
    

    最终会在项目的根目录下生成文件 dist/sdk.min.js, 代码如下:

    (function (factory) {
        typeof define === 'function' && define.amd ? define(factory) :
        factory();
    }((function () { 'use strict';
    
        function a(name) {
            const str = `我是${name}!`;
            return str;
        }
    
        /**
         * @param  {Array} arr
         * @return {Number}
         */
        const addArray = arr => {
            const result = arr.reduce((a, b) => a + b, 0);
            return result;
        };
    
        const res1 = a('老王');
        const res2 = addArray([1, 2, 3, 4]);
    
        console.log(res1);
        console.log(res2);
    
    })));
    

    如上可以看到 在 src/utils/a.js 下的 b函数没有被使用到,所以打包的时候没有被打包进来。

    注意:在上面代码打包后,只有现代浏览器会正常工作,如果要让不支持ES2015的旧版本浏览器下也正常工作的话,我们需要添加一些插件

    使用插件Babel来转换ES6的代码使其支持旧版浏览器

    如上打包后的代码,我们可以在现代浏览器下运行了,但是如果我们使用老版本的浏览器的话,就会产生错误。这时我们需要使用Babel来进行转换

    首先需要安装一些依赖项:

    yarn add @babel/core @babel/preset-env @babel/plugin-external-helpers rollup-plugin-babel --save-dev
    
    注意:Babel preset 是一个有关Babel插件的集合,它会告诉Babel我们需要转译什么。
    创建 .babelrc文件

    在项目的根目录下创建 .babelrc的新文件,并添加如下JSON代码:

    {
        "presets": [
            [
                "@babel/preset-env",
                {
                    "modules": false
                }
            ]
        ],
        "plugins": ["@babel/plugin-external-helpers"]
    }
    

    然后在 rollup.config.js中引入babel插件:

    // Rollup plugins
    import babel from 'rollup-plugin-babel';
    
    export default {
      input: './src/index.js',
      output: {
        file: './dist/sdk.min.js',
        format: 'umd'
      },
      plugins: [
        babel({
          exclude: 'node_modules/**'  // 排除node_module下的所有文件
        })
      ]
    }
    

    为了避免转译第三方脚本,我们需要设置一个 exclude 的配置选项来忽略掉 node_modules 目录下的所有文件。安装完成后,我们重新运行命令;然后打包后代码变成如下:

    (function (factory) {
        typeof define === 'function' && define.amd ? define(factory) :
        factory();
    }((function () { 'use strict';
    
        function a(name) {
          var str = "\u6211\u662F".concat(name, "!");
          return str;
        }
    
        /**
         * @param  {Array} arr
         * @return {Number}
         */
        var addArray = function addArray(arr) {
          var result = arr.reduce(function (a, b) {
            return a + b;
          }, 0);
          return result;
        };
    
        var res1 = a('老王');
        var res2 = addArray([1, 2, 3, 4]);
        console.log(res1);
        console.log(res2);
    
    })));
    

    我们对比下代码,可以看到 addArray 的箭头函数解析成真正的函数。 在转译运行完成后,代码也差不多一样的,只是代码已经支持 了旧版本浏览器。

    注意: Babel也提供了 babel-polyfill, 也可以让IE8之前的浏览器能够顺利执行。

    添加 Uglify插件压缩代码

    安装命令如下:
    yarn add rollup-plugin-uglify
    

    再在 rollup.config.js 配置代码,为了在开发中使代码更具可读性,我们只在生产环境压缩代码: rollup.config.js配置代码如下:

    // Rollup plugins
    import babel from 'rollup-plugin-babel';
    import uglify from 'rollup-plugin-uglify';
    
    export default {
      input: './src/index.js',
      output: {
        file: './dist/sdk.min.js',
        format: 'umd'
      },
      plugins: [
        babel({
          exclude: 'node_modules/**'  // 排除node_module下的所有文件
        })
        // js 压缩插件,需要在最后引入
        uglify(),
      ]
    }
    

    起源地下载网 » 小巧而专注的打包工具rollup

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元