rollup初使用(一)

548 阅读3分钟

rollup

  1. vue react都是通过rollup打包的,能够满足组件库开发打包需求
  2. 打包速度快、上手快、功能简单、扩展性也很强

rollup的基本配置以及使用方法

首先新建一个组件库目录,初始化

npm init -y

对package.json进行修改

{
    "name": "datav-libs-dev",
    "version": "1.0.0",
    // 组件库的描述
    "description": "data components library",
    "main": "index.js",
    "scripts": {
        "dev": "rollup -c rollup.dev.config.js", // 打包命令
        "build": "rollup -wc rollup.dev.config.js" // 带监听的打包命令
    },
    "keywords": [],
    "author": "zsq<XXX@163.com>",
    "license": "ISC",
 }

安装rollup 配置打包选项

npm i rollup -D

在根目录下新建配置文件 rollup.dev.config.js

const path = require('path')
const inputPath = path.resolve(__dirname, './src/index.js');
const outputPath = path.resolve(__dirname, './dist/datav.umd.js');
module.exports = {
  input: inputPath,
  output: {
      file: outputPath,
      format: 'umd',
      name: 'datavTest'
    },
}

打包成不同模块化的区别

配置项中的format表示输出的不同模块化的打包选项:umd cjs es

  1. umd: 是最常用的模块化标准。 umd打包后输出的是js的函数,浏览器可以直接识别
  2. cjs:表示打包后生成的是commomjs标准。 以module.export的形式输出。浏览器不识别module,所有commonjs的模块需要打包
  3. es: 是用ES的模块打包输出,使用export default导出。 浏览器默认不支持 但是在script引入的时候加上 type="module"现代浏览器就可以支持

新建index.js,配置多种模块输出打包

在根目录下新建src/index.js

console.log('hello rollup!');
export { }

安装插件 rollup-plugin-node-resolve

npm run rollup-plugin-node-resolve

然后将 rollup.dev.config.js配置改成

const path = require('path')
const resolve = require('rollup-plugin-node-resolve');
const inputPath = path.resolve(__dirname, './src/index.js');
const outputPath = path.resolve(__dirname, './dist/datav.umd.js');
const outputPathcjs = path.resolve(__dirname, './dist/datav.cjs.js');
const outputPathes = path.resolve(__dirname, './dist/datav.es.js');
// node默认用的是commomjs标准 使用es6的时候就会报错
module.exports = {
  input: inputPath,
  // ouput可以一次输出多个 也可以配置只输出一个
  output: [
    {
      file: outputPath,
      format: 'umd',
      name: 'datavTest'
    },
    {
      file: outputPathcjs,
      format: 'cjs',
      name: 'datavTest'
    },
    {
      file: outputPathes,
      format: 'es',
      name: 'datavTest'
    },
  ],
}

运行命令,打包生成的文件如下

npm run dev

image.png

解决引用外部组件库打包

当我们要自己编写组件库的时候,难免会用到外部的npm包库,这时候不做处理的话,打包后的组件是无法独立使用的,需要将外部引用的库同时按需打包到自己的组件库中,才可以做成一个通用的组件库。使用rollup-plugin-node-resolve插件可以解决这个问题。

先安装一个插件validator ,然后通过es6的形式引入进来

npm install validator

index.js文件

import isEmail from 'validator/es/lib/isEmail'
var test = isEmail('foo@bar.com');
console.log('this is emaill?', test)
export default isEmail

现在打包配置文件中不使用rollup-plugin-node-resolve,打包当前文件,会告诉我们引入的依赖找不到,并且全局的名称没有。

npm run dev 

image.png 为了解决外部的依赖如何打包到我们编写的组件库中,就使用了resolve插件。修改配置文件rollup.dev.config.js

const path = require('path')
const inputPath = path.resolve(__dirname, './src/index.js');
const outputPath = path.resolve(__dirname, './dist/datav.umd.js');
const outputPathcjs = path.resolve(__dirname, './dist/datav.cjs.js');
const outputPathes = path.resolve(__dirname, './dist/datav.es.js');
// node默认用的是commomjs标准 使用es6的时候就会报错
module.exports = {
  input: inputPath,
  // ouput可以一次输出多个 也可以配置只输出一个
  output: [
    {
      file: outputPath,
      format: 'umd',
      name: 'datavTest'
    },
    {
      file: outputPathcjs,
      format: 'cjs',
      name: 'datavTest'
    },
    {
      file: outputPathes,
      format: 'es',
      name: 'datavTest'
    },
  ],
  plugins: [
    resolve()
  ]
}

打包后就可以直接单独使用外部引用的库。