最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • rollup初使用(二)

    正文概述 掘金(zsq宜2018)   2021-07-15   632

    概要:上篇文章介绍了rollup基本使用和配置以及resolve插件的使用,本文主要介绍rollUp编写组件库中需要的treeshaking机制,external使用,以及常用插件 babel插件、commonjs插件、json插件、terser代码打包时候压缩插件的使用

    rollup中的treeShaking 机制

    编写一个src/plugin.js用来测试treeShaking机制

    const a = 1;
    const b = 2;
    function random () {
      console.log('random');
    }
    export default {
      a,
      b,
      random
    }
    

    在src/index.js中引入plugin.js

    import { a, b, random } from "./plugin.js";
    console.log(random, a, b);
    export default random
    

    此时直接打包npm run dev会报错: rollup初使用(二) 出现这个错误的原因是 rollup初使用(二) 通过export default {}导出的时候引用import的方式不对,index.js 改成

    import * as data from "./plugin.js";
    console.log(data.default.a);
    export default data.default.a;
    

    使用npm run dev打包后,在项目下新建exmple/index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body></body>
    <!-- 可以引入库 然后正常执行 -->
    <script src="../dist/datav.umd.js"></script>
    </html>
    

    可以看到控制台打印的是 rollup初使用(二) 因为使用export default导出的时候,打包后将变量都编译到了default属性下面。 并且观察datav.umd.js文件,发现并没有进行treeShaking。还是会将plugin.js没有引用的 a b 打包到库中 rollup初使用(二) 将plugin中导出的形式变成 export + 变量 、export+方法的形式,然后再在index.js中通过结构的方式引入 plug.js改成

    export const a = 1;
    export const b = 2;
    export function random () {
      console.log('random');
    }
    export default {}
    

    index.js改成

    import { random } from "./plugin.js";
    console.log(random);
    export default random
    

    打包观察datav.umd.js可以看到有做了treeShaking,没有引用的变量 a b都没有打包进去。 rollup初使用(二)

    commonjs插件的使用以及commonjs的treeShaking

    rollup.js默认不支持CommonJS模块,新建一个cjs.js里面通过commonjs来导出一个变量

    const cjsa = 'cjs1';
    module.exports = cjsa;
    

    在index.js中引入

    import cjsa from './cjs'
    console.log(cjsa)
    export default cjsa
    

    打包会报错: rollup初使用(二) 因为commjs模式的引用,rollup不支持。使用rollup-plugin-commonjs可以解决这个问题

    npm i rollup-plugin-commonjs
    

    在配置文件中使用

    const commonjs = require('rollup-plugin-commonjs');
    plugins: [
      commonjs(),
    ],
    

    执行打包则可以成功打包!

    commonjs中的treeShaking 使用expors.变量、exports.方法 输出 引用的时候通过结构的方法引用。可以自行尝试!

    external属性使用

    外部引用组件库,然后我们自己的组件库需要引用到它,又不希望他打包到我们自己组件库中,此时就可以使用打包配置文件中的external属性做。

    在配置文件中配置如下代码,与plugins同级目录。

    external: ['lodash'],
    

    打包后的代码中lodash不会引入到打包的代码中去。

    babel_node以及babel插件

    babel-node 工具提供了一个支持 ES6 的交互式运行环境,可以直接执行es6的代码。 babel插件模块的使用可以在打包的时候将es6转换为es5,兼容浏览器

    babel-node使用方法

    1. 首先安装依赖
    npm i @babel/core -D
    npm i @babel/node -D
    npm i @babel/plugin-transform-runtime -D
    npm i @babel/preset-env -D
    
    1. 其次在根目录下创建.babelrc
    {
      "presets": [
        "@babel/preset-env"
      ]
    }
    

    3.使用命令 babel-node就可以运行当前的js文件,并执行结果输出

    npx babel-node xxx.js
    

    babel插件的使用方法

    安装

    npm i rollup-plugin-babel -D
    

    在配置文件中使用

    const babel = require('rollup-plugin-babel');
    plugins: [
      babel({
        exclude: './node_modules/*'
      }),
    ],
    

    打包的时候就可以将es6代码编译成es5的代码了!

    json插件的使用

    当项目中用到json文件引用的时候,直接打包运行会报错,需要json插件支持。

    npm i rollup-plugin-json -D
    

    在配置文件中使用

    const json = require('rollup-plugin-json');
    plugins: [
      json(),
    ],
    

    terser插件

    自己的组件库已经编写好了需要打包正式在项目中使用上线的时候,一般会使用压缩后的代码。这时候就可以使用terser对组件库进行压缩了

    npm i rollup-plugin-terser -D
    

    在配置文件中使用

    import {terser} from 'rollup-plugin-terser'
    plugins: [
      terser(),
    ],
    

    总结

    主要介绍了:rollup打包工具中,es模块引入的时候如何触发treeShaking以及commjs模块引入的时候需要使用commjs模块插件才能在rollup中使用。

    • es模块通过导出的时候使用 export 变量声明/export 方法声明,导入的时候结构方式导入的方式触发treeShaking机制
    • commjs模块通过 export.变量名/export.方法名导出,解构方法导入触发treeShaking

    插件的使用方法

    • json插件解决项目中引入json的问题
    • external解决外部组件引入的时候不希望它打包到自己组件的问题
    • babel插件解决将es6转为es5打包输出兼容浏览器的问题
    • terser插件解决压缩代码的问题
    • babel_node安装方法,对js库文件进行调试

    下载网 » rollup初使用(二)

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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