配置环境
- 根据开发环境区分不同的配置
- 设置对应的 npm script
- 输出不同规范的产物:umd、umd.min、cjs、esm、iife(global)
在scripts目录下创建rollup配置文件
├── rollup.config.base.js // 基础文件├── rollup.config.dev.js // 开发环境的配置└── rollup.config.prod.js // 生产环境的配置
// 安装以下 npm 包// npm install -D rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-alias @rollup/plugin-replace @rollup/plugin-eslint @rollup/plugin-babel rollup-plugin-terser rollup-plugin-clear @rollup/plugin-jsonimport { nodeResolve } from '@rollup/plugin-node-resolve' // 解析 node_modules 中的模块import commonjs from '@rollup/plugin-commonjs' // cjs => esmimport alias from '@rollup/plugin-alias' // alias 和 reslove 功能import replace from '@rollup/plugin-replace'import eslint from '@rollup/plugin-eslint'import { babel } from '@rollup/plugin-babel'import { terser } from 'rollup-plugin-terser'import clear from 'rollup-plugin-clear'import json from '@rollup/plugin-json' // 支持在源码中直接引入json文件,不影响下面的import { name, version, author } from '../package.json'const pkgName = 'sumfunctionmethods'// 打包处理的文件,添加的备注信息const banner ='/*!\n' +` * ${name} v${version}\n` +` * (c) 2022-${new Date().getFullYear()} ${author}\n` +' * Released under the MIT License.\n' +' */'export default {input: 'src/index.js',// 同时打包多种规范的产物output: [{file: `dist/${pkgName}.umd.js`,format: 'umd',name: pkgName,banner},{file: `dist/${pkgName}.umd.min.js`,format: 'umd',name: pkgName,banner,plugins: [terser()]},{file: `dist/${pkgName}.cjs.js`,format: 'cjs',name: pkgName,banner,plugins: [terser()]},{file: `dist/${pkgName}.esm.js`,format: 'es',name: pkgName,banner,plugins: [terser()]},{file: `dist/${pkgName}.js`,format: 'iife',name: pkgName,banner,plugins: [terser()]}],// 注意 plugin 的使用顺序plugins: [json(),clear({targets: ['dist']}),alias(),replace({'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),preventAssignment: true}),nodeResolve(),commonjs({include: 'node_modules/**'}),eslint({throwOnError: true, // 抛出异常并阻止打包include: ['src/**'],exclude: ['node_modules/**']}),babel({ babelHelpers: 'bundled' })]}
// npm install -D rollup-plugin-serve rollup-plugin-livereloadimport baseConfig from './rollup.config.base'import serve from 'rollup-plugin-serve'import livereload from 'rollup-plugin-livereload'export default {...baseConfig,plugins: [...baseConfig.plugins,serve({port: 8080,contentBase: ['dist', 'examples/brower'],openPage: 'index.html',}),livereload({watch: 'examples/brower',})]}
// npm install -D rollup-plugin-filesizeimport baseConfig from './rollup.config.base'import filesize from 'rollup-plugin-filesize'export default {...baseConfig,plugins: [...baseConfig.plugins,filesize()]}
配置 babel 解析兼容
安装依赖npm i -D @babel/core @babel/preset-env 添加文件.babelrc.js
module.exports = {presets: [['@babel/preset-env', {// rollupjs 会处理模块,所以设置成 falsemodules: false}]],plugins: []}
配置scripts
{"scripts": {"dev": "rollup -w --environment NODE_ENV:development -c scripts/rollup.config.dev.js","build": "rollup --environment NODE_ENV:development -c scripts/rollup.config.prod.js",}}
