rollup的使用

597 阅读2分钟

rollup

1.rollup

类似于webpack打包工具,常用于打包js文件

npm i rollup -D
// rollup.config.js
export default {
  input: './src/index.js', // 以哪个文件为打包入口
  output: {
    file: 'dist/umd/vue.js', // 出口
    name: 'Vue', // 打包后的全局变量名字
    format: 'umd', // 统一模块规范
    sourcemap: true, // es6 -> es5. 开启代码调试 可以找到源代码中的报错位置
  },
}

2.rollup-plugin-babel

桥梁 => 关联babel

npm i rollup=plugin-bable -D
// rollup.config.js
import babel from 'rollup-plugin-babel';
export default{
  ...
  plugins: [
    babel({
      exclude: 'node_modeles/**' // 忽略文件
    })
  ]
}

3.rollup-plugin-serve

设置静态服务 => 本地启动静态服务

npm i rollup-plugin-serve -D
//rollup.config.js
import serve from 'rollup-plugin-serve';
export default{
  ...
  plugins: [
    serve({
      open: true, // 自动打开
      openPage: '/public/index.html', // 默认打开路径
      port: 3000,// 端口号
      contentBase: ''
    })
  ]
}

4.rollup-plugin-postcss

处理scss文件,另需要安装node-sass

npm i rollup-plugin-postcss node-sass -D
// rollup.config.js
import postcss from 'rollup-plugin-postcss';

export default {
  ...
  plugins:[
    postcss({
      extract: 'css/vogso.css', // 输出路径
      inject: true,
      minimize: isProductionEnv,
      extensions: ['css', 'scss']
    }),
  ]
}

5.rollup-plugin-livereload

实现实时刷新页面

npm i rollup-plugin-livereload -D
// rollup.config.js
import livereload from 'rollup-plugin-livereload';

export default {
  ...
  plugins:[
    livereload()
  ]
}

6.rollup-plugin-uglify

打包代码压缩

npm i rollup-plugin-uglify -D
// rollup.config.js
import { uglify } from 'rollup-plugin-uglify';

export default {
  ...
  plugins:[
    uglify()
  ]
}

7.rollup-plugin-eslint

使用eslint,另需要安装

npm i rollup-plugin-eslint -D
// rollup.config.js
import { eslint } from 'rollup-plugin-eslint';

export default {
  ...
  plugins:[
    eslint({
      include: ['src/**/*.js'] // eslint检查范围
    }),
  ]
}
// .eslintrc.js
module.exports = {
  root: true,
  parserOptions: {
    parser: 'babel-eslint',
    sourceType: 'module'
  },
  env: {
    browser: true,
    node: true,
    es6: true,
    jquery: true 
  },
  extends: ['eslint:recommended'],
  rules: {
    "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
    "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
    "no-param-reassign": 1,
    // "no-unused-expressions": 1,
    "no-unused-vars": 1,
    "no-control-regex": 0,
    "no-plusplus": 0,
    semi: [2, "always"],
    "comma-dangle": 0,
    allowKeywords: 0,
    "quote-props": 0,
  }
}

忽略检测文件.eslintignore(非必需)

//.eslintignore
public
dist

8.rollup-plugin-json

可以读取json文件比如package.json

npm i 'rollup-plugin-json -D
// rollup.config.js
import json from 'rollup-plugin-json';

export default {
  ...
  plugins:[
    json()
  ]
}

例:

// index.js
import pjson from '../package.json';
const VER = pjson.version;

全部使用

// rollup.config.js
import babel from 'rollup-plugin-babel';
import serve from 'rollup-plugin-serve';
import postcss from 'rollup-plugin-postcss';
import livereload from 'rollup-plugin-livereload';
import { uglify } from 'rollup-plugin-uglify';
import { eslint } from 'rollup-plugin-eslint';
import json from 'rollup-plugin-json';

const ENV = process.env.ENV;
const isProductionEnv = ENV === 'production';

export default {
  input: './src/index.js',
  output: {
    file: 'dist/vogso.js',
    name: 'Vogsojs',
    format: 'umd',
    sourcemap: true
  },
  plugins: [
    babel({
      exclude: 'node_modeles/**'
    }),
    process.env.ENV === 'development' ? serve({
      open: !true,
      openPage: '/public/index.html',
      port: 3001,
      contentBase: ''
    }) : uglify(),
    postcss({
      extract: 'css/vogso.css', // 输出路径
      inject: true,
      minimize: isProductionEnv,
      extensions: ['css', 'scss']
    }),
    livereload(),
    eslint({
      include: ['src/**/*.js']
    }),
    json()
  ]
};