随着结合服务器端和客户端代码的完整堆栈框架的越来越普及,构建工具需要选择性地支持包括或忽略项目中的文件。
在为React Serverless SSR Rendering开发框架时,我需要功能来防止某些代码为服务器或客户端打包。具体而言,所需依赖关系与客户端JavaScript不相容的服务器端逻辑(例如fs
)将导致我的客户端构建破裂。
虽然esbuild提供了许多用于排除某些文件或依赖关系的工具,但我发现这些工具不足以满足我的需求,因此开发了koude1。
此插件允许在源文件中添加评论作为以下内容:
/* esbuild-ignore */
当插件配置如下时,Esbuild忽略了此文件中的所有内容。
import ignorePlugin from 'esbuild-ignore-with-comments-plugin';
import { build } from 'esbuild';
await build({
plugins: [ignorePlugin()],
});
进一步可以通过在评论中添加限定符,例如:
,在同一代码库上支持多个Esbuild构建配置
/* esbuild-ignore ui */
然后将文件在构建中忽略,使用如下配置的插件:
await build({
plugins: [ignorePlugin(['ui'])],
});
例如,此插件用于项目React服务器端渲染(react-ssr)中:
- 仅在服务器端渲染过程中需要该文件koude2才能组装HTML文档。因此,添加了评论
/* esbuild-ignore ui */
:
/* esbuild-ignore ui */
import type { RenderDocumentProps } from '@goldstack/template-ssr';
const renderDocument = async (props: RenderDocumentProps<unknown>): Promise<string> => {
// ...
}
- 仅需要文件koude4才能定义Esbuild本身的配置。它不需要为客户端或服务器捆绑。因此,提供了为服务器端和客户端构建的注释以忽略此文件:
/* esbuild-ignore ui */
/* esbuild-ignore server */
import { pnpPlugin } from '@yarnpkg/esbuild-plugin-pnp';
import cssPlugin from 'esbuild-css-modules-client-plugin';
import ignorePlugin from 'esbuild-ignore-with-comments-plugin';
// ...
如果您有任何疑问或评论,请reach out或raise an issueðä。