正所谓万事开头难,配置rollup最难的一步也正是开头的第一步。不过不要紧。html
微笑面对危险,梦想成真不会遥远!node
鼓起勇气坚决向前,奇迹必定会出现!webpack
npm initgit
没错骚年,一路回车,你已经成功完成了本文最难以及最核心的一步——初始化了一个项目。相信你在剩余的几个简单步骤中一定势如破竹,一路到底。github
接下来按照这个文件树建立相应的场景与角色(文件夹&文件)。是否是没有骗你,soeasy~web
build文件夹下是rollup的三元猛将。相信用过歪脖派壳(webpack)的小伙伴对这种配置文件都比较熟悉。npm
大哥刘备rollup.config.js,是rollup打包的通用配置文件,也就是说不管你想干啥确定是要先过大哥这一关,人家一定是大哥(三人中的核心,主要技能是控制打包流程、代码转换、cmd规范的js转换、eslint代码规范)。json
二哥关羽rollup.config.dev.js,是rollup在开发环境的配置文件,也就是说在平时开发的时候是必定会与关二哥打交道的,不过也不用担忧什么,关二哥义字当先,必先帮你打平开发环境的天下。(主要技能是启动本地服务、开启热重载)浏览器
三弟张飞rollup.config.prod.js,是rollup构建生产文件的配置文件。人送外号猛张飞,一人走上rollup生产的长坂坡。(主要是技能是混淆生产代码)bash
dist文件夹是张飞输出的地方(生产构建后会将打包的相关资源放到这里)
example是关羽打副本的地方(开发时,用于调试)
src 则是刘备选择打开城门的入口(打包的入口)
package.json 里边记录着武器库(各类依赖&balabala)
到此,本片教程完结。
奥对,上述只是对打造rollup脚手架的幻想,毕竟想象很丰富,现实很骨感。 那么接下来,咱们就先对三元猛将进行技能加点以及武器配备。
武器篇
npm i -D rollup // 核心武器,rollup基础模块,没安它还玩个球。
npm i -D rollup-plugin-babel // 副武器,用于转换代码。
npm i -D @babel/core @babel/preset-env @babel/plugin-transform-classes // 副武器必要镶嵌的强化宝石 分别是babel核心、自动辨别加载相应babel模块、class转换
npm i -D rollup-plugin-node-resolve // 辅助武器,用于识别没法识别node_modules的模块
npm i -D rollup-plugin-commonjs // 辅助武器,用于将node_modules中的cmd规范的模块转换为es语法
npm i -D rrollup-plugin-eslint // 代码规范检查插件
// 一键安装武器
npm i -D rollup rollup-plugin-babel @babel/core @babel/preset-env @babel/plugin-transform-classes rollup-plugin-node-resolve rollup-plugin-commonjs rollup-plugin-eslint
复制代码
技能加点篇 rollup.config.js
const path = require('path');
// 装载武器
const babel = require('rollup-plugin-babel');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
const {eslint} = require('rollup-plugin-eslint')
const resolveFile = function (filePath) {
return path.join(__dirname, '..', filePath)
}
//
module.exports = [
{
input: resolveFile('src/index.js'), // 打包文件入口
output: {
file: resolveFile('dist/index.js'), // 输出文件
format: 'umd', // 以何种模式输出
name: 'Demo', // umd输出模式必填name
},
plugins: [ // 武器插槽装载上述武器(各类插件)
resolve(),
commonjs(),
eslint({
include: ['src/**'],
exclude: ['node_modules/**']
}),
babel({
babelrc: false,
presets: [
['@babel/preset-env', { modules: false }]
],
plugins: [
["@babel/plugin-transform-classes", {
"loose": true
}]
]
}),
],
},
]
复制代码
TIPS之eslint,若是童鞋们须要配合IDE进行eslint代码检查,那么咱们还须要安装为此打造的武器。
// 安装eslint
npm i -g eslint
// 而后在咱们在项目的根目录执行
eslint --init // 根据需求进行选择,而后会生成一个.eslintrc.**的文件,这里边就是eslint的配置。这样就能够配合你的IDE进行代码检查了而且rollup-plugin-eslint会自动加载这个配置文件。更多eslint配置请查看eslint文档奥~
复制代码
武器篇
npm i -D rollup-plugin-serve // 用于启动本地server
npm i -D rollup-plugin-livereload // 配合rollup-plugin-serve 监听开发文件自动刷新浏览器,不再用手动刷新了~
复制代码
技能加点篇 rollup.config.dev.js
process.env.NODE_ENV = 'development'; // 设置环境变量为开发模式
// 加载武器
const path = require('path');
const serve = require('rollup-plugin-serve');
const configList = require('./rollup.config'); // 叫上大哥一块儿干仗
const livereload = require('rollup-plugin-livereload');
const resolveFile = function(filePath) {
return path.join(__dirname, '..', filePath)
}
// 与大哥刘备合体(合并rollup.config.js中的基础配置)
configList.map((config, index) => {
config.output.sourcemap = true;
if( index === 0 ) {
config.plugins = [
...config.plugins,
...[
serve({ // 装备serve武器并配置参数
port: 3000,
contentBase: [resolveFile('')]
}),
livereload(resolveFile('dist')) // 启动重载,而且监听dist目录
]
]
}
return config;
})
module.exports = configList;
复制代码
武器篇
npm i -D rollup-plugin-uglify // 混淆代码专用
// TIPS:上述武器不支持es模块打包,因此想输出uglify的es模块须要使用下边的武器哦~
npm i -D rollup-plugin-uglify-es
复制代码
技能加点篇
process.env.NODE_ENV = 'production'; // 设置环境变量为生产
// 加载武器
// const { uglify } = require('rollup-plugin-uglify');
import uglify from 'rollup-plugin-uglify-es';
const configList = require('./rollup.config'); // 一样叫上大哥刘备一块儿干仗
const resolveFile = function(filePath) {
return path.join(__dirname, '..', filePath)
}
// 与大哥刘备合体(合并rollup.config.js中的基础配置)
configList.map((config, index) => {
config.output.sourcemap = false;
config.plugins = [
...config.plugins,
...[
uglify() // 装备uglify武器
]
]
return config;
})
module.exports = configList;
复制代码
那么到如今,三元大将的的武器&技能已经点好,那么如何让他们听命于你,遵从指挥呢? 你只须要对着他们说月棱镜威力,变身!~(这次自带BGM) 就能够啦!~
找到一直不太起眼的package.json,其中有一个scripts字段
"scripts": {
"build": "node_modules/.bin/rollup -c ./build/rollup.config.prod.js", // 构建命令,调用张飞 rollup -c 指定配置文件
"dev": "node_modules/.bin/rollup -w -c ./build/rollup.config.dev.js", // 启动生产命令,调用关羽 rollup -w 开启监听模式,文件变化随时知道
},
复制代码
为何没有调用大哥刘备的命令,由于调用张飞与关羽的时候他们都会叫上大哥哦。 在调用以前,咱们先构建一个简单的副本,要不把他们叫出来也没什么意义。
副本入口src/index.js
class Demo {
constructor (name) {
this.name = name
}
sayName () {
console.log(this.name)
}
}
export default Demo
复制代码
副本demo页面 example/index.html
<html>
<head>
</head>
<body>
<p>hello mozlee</p>
<script src="./../dist/index.js"></script>
<script>
var demo = new Demo('MozLee');
demo.sayName();
</script>
</body>
</html>
复制代码
如今咱们试试咱们的命令好很差使
调用关羽
调用张飞
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self,e.Demo=n())}(this,function(){"use strict";return function(){function e(e){this.name=e}return e.prototype.sayName=function(){console.log(this.name)},e}()});
复制代码
已经生成了混淆的代码,调用张飞成功。 至此,咱们算是完成了rollup的经常使用配置,能够说打通了rollup的入门级副本。
文中各种武器都有更详细的配置,须要你们本身去参看对应的文档,不在文中一一例举。
另付其余搭建rollup参考文档