# onwarn

类型:
(warning: RollupWarning, defaultHandler: (warning: string | RollupWarning) => void) => void;

该选项为一个拦截警告信息的函数。如果不提供,警告将去重并打印到控制台。当在命令行使用 --silent 选项时,该选项是获取警告通知的唯一途径。

该函数接收两个参数:警告对象和默认处理函数。其中,警告对象至少有一个 code 和一个 message 属性,用于控制如何处理不同种类的警告。另外,根据不同的警告类型,警告对象上会有其他的属性。可查看 utils/error.ts 以获得完整的错误和警告列表,以及它们的代码和属性。

// rollup.config.js
export default {
	//...,
	onwarn(warning, warn) {
		// 跳过指定类型的警告
		if (warning.code === 'UNUSED_EXTERNAL_IMPORT') return;

		// 抛出其他类型的警告
		// 使用 Object.assign 拷贝 new Error(warning.message)
		// 将使命令行打印额外的信息,如警告位置
		// 和帮助 URL。
		if (warning.code === 'MISSING_EXPORT')
			throw Object.assign(new Error(), warning);

		// 使用默认处理函数兜底
		warn(warning);
	}
};

很多警告还具有 loc 和 frame 属性,它们可以用来定位警告来源:

// rollup.config.js
export default {
  ...,
  onwarn ({ loc, frame, message }) {
    if (loc) {
      console.warn(`${loc.file} (${loc.line}:${loc.column}) ${message}`);
      if (frame) console.warn(frame);
    } else {
      console.warn(message);
    }
  }
};
Last Updated: 6/14/2023, 8:56:23 AM