配置环境

  • 根据开发环境区分不同的配置
  • 设置对应的 npm script
  • 输出不同规范的产物:umd、umd.min、cjs、esm、iife(global)

在scripts目录下创建rollup配置文件

  1. ├── rollup.config.base.js // 基础文件
  2. ├── rollup.config.dev.js // 开发环境的配置
  3. └── rollup.config.prod.js // 生产环境的配置
  1. // 安装以下 npm 包
  2. // 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-json
  3. import { nodeResolve } from '@rollup/plugin-node-resolve' // 解析 node_modules 中的模块
  4. import commonjs from '@rollup/plugin-commonjs' // cjs => esm
  5. import alias from '@rollup/plugin-alias' // alias 和 reslove 功能
  6. import replace from '@rollup/plugin-replace'
  7. import eslint from '@rollup/plugin-eslint'
  8. import { babel } from '@rollup/plugin-babel'
  9. import { terser } from 'rollup-plugin-terser'
  10. import clear from 'rollup-plugin-clear'
  11. import json from '@rollup/plugin-json' // 支持在源码中直接引入json文件,不影响下面的
  12. import { name, version, author } from '../package.json'
  13. const pkgName = 'sumfunctionmethods'
  14. // 打包处理的文件,添加的备注信息
  15. const banner =
  16. '/*!\n' +
  17. ` * ${name} v${version}\n` +
  18. ` * (c) 2022-${new Date().getFullYear()} ${author}\n` +
  19. ' * Released under the MIT License.\n' +
  20. ' */'
  21. export default {
  22. input: 'src/index.js',
  23. // 同时打包多种规范的产物
  24. output: [
  25. {
  26. file: `dist/${pkgName}.umd.js`,
  27. format: 'umd',
  28. name: pkgName,
  29. banner
  30. },
  31. {
  32. file: `dist/${pkgName}.umd.min.js`,
  33. format: 'umd',
  34. name: pkgName,
  35. banner,
  36. plugins: [terser()]
  37. },
  38. {
  39. file: `dist/${pkgName}.cjs.js`,
  40. format: 'cjs',
  41. name: pkgName,
  42. banner,
  43. plugins: [terser()]
  44. },
  45. {
  46. file: `dist/${pkgName}.esm.js`,
  47. format: 'es',
  48. name: pkgName,
  49. banner,
  50. plugins: [terser()]
  51. },
  52. {
  53. file: `dist/${pkgName}.js`,
  54. format: 'iife',
  55. name: pkgName,
  56. banner,
  57. plugins: [terser()]
  58. }
  59. ],
  60. // 注意 plugin 的使用顺序
  61. plugins: [
  62. json(),
  63. clear({
  64. targets: ['dist']
  65. }),
  66. alias(),
  67. replace({
  68. 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
  69. preventAssignment: true
  70. }),
  71. nodeResolve(),
  72. commonjs({
  73. include: 'node_modules/**'
  74. }),
  75. eslint({
  76. throwOnError: true, // 抛出异常并阻止打包
  77. include: ['src/**'],
  78. exclude: ['node_modules/**']
  79. }),
  80. babel({ babelHelpers: 'bundled' })
  81. ]
  82. }
  1. // npm install -D rollup-plugin-serve rollup-plugin-livereload
  2. import baseConfig from './rollup.config.base'
  3. import serve from 'rollup-plugin-serve'
  4. import livereload from 'rollup-plugin-livereload'
  5. export default {
  6. ...baseConfig,
  7. plugins: [
  8. ...baseConfig.plugins,
  9. serve({
  10. port: 8080,
  11. contentBase: ['dist', 'examples/brower'],
  12. openPage: 'index.html',
  13. }),
  14. livereload({
  15. watch: 'examples/brower',
  16. })
  17. ]
  18. }
  1. // npm install -D rollup-plugin-filesize
  2. import baseConfig from './rollup.config.base'
  3. import filesize from 'rollup-plugin-filesize'
  4. export default {
  5. ...baseConfig,
  6. plugins: [
  7. ...baseConfig.plugins,
  8. filesize()
  9. ]
  10. }

配置 babel 解析兼容

安装依赖npm i -D @babel/core @babel/preset-env 添加文件.babelrc.js

  1. module.exports = {
  2. presets: [
  3. ['@babel/preset-env', {
  4. // rollupjs 会处理模块,所以设置成 false
  5. modules: false
  6. }]
  7. ],
  8. plugins: [
  9. ]
  10. }

配置scripts

  1. {
  2. "scripts": {
  3. "dev": "rollup -w --environment NODE_ENV:development -c scripts/rollup.config.dev.js",
  4. "build": "rollup --environment NODE_ENV:development -c scripts/rollup.config.prod.js",
  5. }
  6. }