1. 创建项目
命令行执行一下命令,初始化项目
npm init
2. 在本地安装 Rollup
项目根目录下执行命令
npm install rollup --save-dev
// yarn -D add rollup
3. 配置文件
项目根目录下创建 rollup.config.js 文件, 如下内容是一个简单的配置。
下面会更新
import { name } from './package.json'
export default [
{
input: 'src/main.js',
output: {
file: `dist/${name}.js`,
format: 'cjs',
},
},
]
执行 npx rollup --config 命令,正常会按照 config 文件配置进行打包到 dist 目录
4. 添加编译命令
// /package.json
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w"
},
5. 插件安装
导入 json 文件数据
-
安装 @rollup/plugin-json
npm install --save-dev @rollup/plugin-json -
rollup.config.js 添加插件
// rollup.config.js import json from '@rollup/plugin-json' export default { input: 'src/main.js', output: { ... }, plugins: [json()], } -
使用 json 文件数据
// src/main.js import { version } from '../package.json' export class Guide { constructor() { this.version = version } }
安装 babel
-
安装@rollup/plugin-babel 插件
npm i -D @rollup/plugin-babel @rollup/plugin-node-resolve -
rollup.config.js添加插件// rollup.config.js import resolve from '@rollup/plugin-node-resolve'; import babel from '@rollup/plugin-babel'; export default { input: 'src/main.js', output: {...}, plugins: [resolve(), babel({ babelHelpers: 'bundled' })] }; -
添加 babel 配置文件
代码目录下新建.babelrc.json{ "presets": ["@babel/env"] } -
安装 babel/core
npm i -D @babel/core @babel/preset-env
运行查看
安装 commonjs
-
安装
@rollup/plugin-commonjsnpm install @rollup/plugin-commonjs --save-dev -
添加插件
import commonjs from '@rollup/plugin-commonjs'
export default [
{
...
plugins: [
commonjs(),
],
},
]
安装 terser
js 压缩插件
1. 安装rollup-plugin-terser
yarn add rollup-plugin-terser --dev
## Or with npm:
npm i rollup-plugin-terser --save-dev
2. 配置
//
import { terser } from "rollup-plugin-terser";
export default [
{
...
plugins: [
terser()
],
},
]
构建插件 - progress
在控制台中显示构建进度。
1. 安装rollup-plugin-progress
npm i rollup-plugin-progress --save-dev
2. 配置
//
import progress from 'rollup-plugin-progress'
export default [
{
...
plugins: [
progress()
],
},
]
2. 构建插件 - filesize
在控制台中显示包的文件大小。
1. 安装rollup-plugin-filesize
npm install rollup-plugin-filesize
2. 配置
//
import filesize from 'rollup-plugin-filesize';
export default [
{
...
plugins: [
filesize()
],
},
]
安装 postcss
处理 css - 需要继续补充
-
安装 rollup-plugin-postcss, 官方推荐使用
yarnyarn add postcss rollup-plugin-postcss --dev -
配置
// { input: `${inputPath}/style/style.scss`, output: { file: `${outputPath}/${name}.css`, format: 'es', banner, }, plugins: [ bundleScss({ exclusive: false }), postcss({ extract: true, plugins: postCSSPlugins, }), ], }
6. 更新配置文件
1. 插件单独维护
const jsPlugins = [
json(),
resolve(),
progress(),
filesize({
showGzippedSize: true,
}),
babel({
exclude: 'node_modules/**',
}),
commonjs(),
]
export default [
{
input: `${inputPath}/main.js`,
output: {
file: `${outputPath}/${name}.js`,
format: 'umd',
name: name.replace(/^[a-z]/, (a) => {
return a.toUpperCase()
}),
banner,
},
plugins: jsPlugins,
},
{
input: `${inputPath}/main.js`,
output: {
file: `${outputPath}/${name}.min.js`,
format: 'umd',
name: name,
banner,
},
plugins: [...jsPlugins, terser()],
},
]
参考
// /rollup.config.js
import { name, version } from './package.json'
import json from '@rollup/plugin-json'
import resolve from '@rollup/plugin-node-resolve'
import { babel } from '@rollup/plugin-babel'
import postcss from 'rollup-plugin-postcss'
import normalize from 'postcss-normalize'
import autoprefixer from 'autoprefixer'
import commonjs from '@rollup/plugin-commonjs'
import progress from 'rollup-plugin-progress'
import filesize from 'rollup-plugin-filesize'
import { terser } from 'rollup-plugin-terser'
import cssnano from 'cssnano'
import bundleScss from 'rollup-plugin-bundle-scss'
// import sass from 'rollup-plugin-sass'
const inputPath = './src'
const outputPath = './dist'
const banner = `/*!
* ${name} v${version}
* author: xxxx
* Date: ${new Date().toUTCString()}
*/
`
const jsPlugins = [
json(),
resolve(),
progress(),
filesize({
showGzippedSize: true,
}),
babel({
exclude: 'node_modules/**',
}),
commonjs(),
]
const postCSSPlugins = [normalize, autoprefixer]
export default [
{
input: `${inputPath}/style/style.scss`,
output: {
file: `${outputPath}/${name}.css`,
format: 'es',
banner,
},
plugins: [
bundleScss({ exclusive: false }),
postcss({
extract: true,
plugins: postCSSPlugins,
}),
],
},
{
input: `${inputPath}/style/style.scss`,
output: {
file: `${outputPath}/${name}.min.css`,
format: 'es',
banner,
},
plugins: [
postcss({
extract: true,
sourceMap: true,
plugins: [...postCSSPlugins, cssnano()],
}),
],
},
{
input: `${inputPath}/main.js`,
output: {
file: `${outputPath}/${name}.js`,
format: 'umd',
name: name.replace(/^[a-z]/, (a) => {
return a.toUpperCase()
}),
banner,
},
plugins: jsPlugins,
},
{
input: `${inputPath}/main.js`,
output: {
file: `${outputPath}/${name}.min.js`,
format: 'umd',
name: name,
banner,
},
plugins: [...jsPlugins, terser()],
},
]