跳到主要内容

语法

2023年12月19日
柏拉文
越努力,越幸运

一、认识


使用 Rollup2 种方式,分别是命令行调用和代码调用。

二、代码调用


可以使用 JavaScript API 来调用 Rollup,主要分为rollup.rolluprollup.watch两个 API

2.1 rollup.watch

可以通过 rollup.watch 来完成 watch 模式下的打包,即每次源文件变动后自动进行重新打包。你可以新建watch.js文件,内容入下:

// watch.js
const rollup = require("rollup");

const watcher = rollup.watch({
// 和 rollup 配置文件中的属性基本一致,只不过多了`watch`配置
input: "./src/index.js",
output: [
{
dir: "dist/es",
format: "esm",
},
{
dir: "dist/cjs",
format: "cjs",
},
],
watch: {
exclude: ["node_modules/**"],
include: ["src/**"],
},
});

// 监听 watch 各种事件
watcher.on("restart", () => {
console.log("重新构建...");
});

watcher.on("change", (id) => {
console.log("发生变动的模块id: ", id);
});

watcher.on("event", (e) => {
if (e.code === "BUNDLE_END") {
console.log("打包信息:", e);
}
});

现在你可以通过执行 node watch.js 开启 Rollupwatch 打包模式,当你改动一个文件后可以看到如下的日志,说明 Rollup 自动进行了重新打包,并触发相应的事件回调函数:


发生生变动的模块id: /xxx/src/index.js
重新构建...
打包信息: {
code: 'BUNDLE_END',
duration: 10,
input: './src/index.js',
output: [
// 输出产物路径
],
result: {
cache: { /* 产物具体信息 */ },
close: [AsyncFunction: close],
closed: false,
generate: [AsyncFunction: generate],
watchFiles: [
// 监听文件列表
],
write: [AsyncFunction: write]
}
}

2.2 rollup.rollup

首先是 rollup.rollup,用来一次性地进行 Rollup 打包,你可以新建 build.js,内容如下:

// build.js
const rollup = require("rollup");

// 常用 inputOptions 配置
const inputOptions = {
input: "./src/index.js",
external: [],
plugins:[]
};

const outputOptionsList = [
// 常用 outputOptions 配置
{
dir: 'dist/es',
entryFileNames: `[name].[hash].js`,
chunkFileNames: 'chunk-[hash].js',
assetFileNames: 'assets/[name]-[hash][extname]',
format: 'es',
sourcemap: true,
globals: {
lodash: '_'
}
}
// 省略其它的输出配置
];

async function build() {
let bundle;
let buildFailed = false;
try {
// 1. 调用 rollup.rollup 生成 bundle 对象
bundle = await rollup.rollup(inputOptions);
for (const outputOptions of outputOptionsList) {
// 2. 拿到 bundle 对象,根据每一份输出配置,调用 generate 和 write 方法分别生成和写入产物
const { output } = await bundle.generate(outputOptions);
await bundle.write(outputOptions);
}
} catch (error) {
buildFailed = true;
console.error(error);
}
if (bundle) {
// 最后调用 bundle.close 方法结束打包
await bundle.close();
}
process.exit(buildFailed ? 1 : 0);
}

build();

主要的执行步骤如下:

  1. 通过 rollup.rollup 方法,传入 inputOptions,生成 bundle 对象

  2. 调用 bundle 对象的 generatewrite 方法,传入 outputOptions,分别完成产物和生成和磁盘写入

  3. 调用 bundle 对象的 close 方法来结束打包

接着你可以执行 node build.js,这样,我们就可以完成了以编程的方式来调用 Rollup 打包的过程。

三、命令行调用


可以在 1package.json 中加入如下的构建脚本:

{
// rollup 打包命令,`-c` 表示使用配置文件中的配置
"build": "rollup -c"
}