背景:
我有一个Webpack setup,我用它来预处理带有PurgeCSS的SCSS,带有esbuild-loader的实时HMR服务器,用于加快Webpack中的编译速度,但即使这样,我的编译时间仍然很慢,我希望ESBuild的原始速度,并完全删除Webpack设置。
ESBuild的基本设置很简单,您可以使用npm安装esbuild,并在package.json中添加以下代码:
{
...
"scripts": {
...
"watch": "esbuild --bundle src/script.js --outfile=dist/script.js --watch"
},
...
}
并使用以下命令运行它:
npm run watch
这种单行配置将绑定脚本和样式(您可以在script.js中导入style.css),并将文件输出到dist目录中,但这不允许对ESBuild进行高级配置,例如为样式表和脚本文件输出不同的名称或使用插件。
问题:
1.如何使用外部配置文件配置ESBuild?
- ESBuild不支持现成的SCSS。如何配置esbuild-sass-plugin这样的外部插件,甚至更进一步,如何设置PostCSS及其Autoprefixer这样的插件?
1.如何设置开发服务器与自动重建?
1.如何设置PurgeCSS?
2条答案
按热度按时间2izufjch1#
解决方案:
1.如何使用外部配置文件配置ESBuild?
1.在根目录中创建新文件:esbuild.js,包含以下内容:
1.在package.json中添加以下代码:
1.通过使用npm run build命令运行构建,这将捆绑您的样式表和脚本,并将它们输出到***dist***目录中。
1.有关更多详细信息和/或添加自定义构建选项,请参阅ESBuild的构建API文档。
2. ESBuild不支持现成的SCSS。如何配置外部插件,如esbuild-sass-plugin,甚至更进一步,如何设置PostCSS和插件,如Autoprefixer?
1.安装npm依赖项:
npm i -D esbuild-sass-plugin postcss autoprefixer
1.将您的esbuild.js编辑为以下代码:
3.如何使用自动重建功能设置开发服务器?
watch: true
或者运行它的服务器。It doesn't allow both。1.因此,为了在满足这两个限制的同时仍然允许使用服务器,我们可以使用Live Server。使用
npm i -D @compodoc/live-server
安装它。1.在根目录中创建新文件:esbuild_watch.js,包含以下内容:
1.编辑package.json中的脚本:
1.要运行构建,请使用此命令
npm run build
。1.运行
npm run watch
来运行带有自动重建功能的dev服务器。这是一种“hacky”的方式,但是做得很好。4.如何设置PurgeCSS?
我发现了一个伟大的插件:esbuild-plugin-purgecss由peteryuan创建,但是它不允许为需要解析的html/views路径传递选项,所以我创建了esbuild-plugin-purgecss-2来完成这项工作。要设置它,请阅读下面的内容:
1.安装依赖项
npm i -D esbuild-plugin-purgecss-2 glob-all
。1.将以下代码添加到esbuild.js和esbuild_watch.js文件中:
1.现在,运行
npm run build
或npm run watch
将从上面代码中glob.sync([...]
中提到的文件路径中清除CSS。TL;DR:
1.在根目录esbuild.js中创建一个外部配置文件,并在
scripts: {..}
内的package.json中添加运行该文件的命令,例如"build": "node esbuild.js"
,以使用npm run build
引用和运行配置文件。watch
或serve
与ESBuild,但不能同时使用两者。要克服这一问题,请使用单独的开发服务器库,如Live Server。1.完整的设置请参考我在github上的custom-esbuild-with-scss-purgecss-and-liveserver仓库。
最终注解:
我知道这是一个很长的线程,但它花了我很多时间来弄清楚这些。我的意图是有这个在这里为其他人寻找同样的问题,并试图找出从哪里开始。
ax6ht2ek2#
添加到Arslan's terrific answer,您可以使用postcss的PurgeCSS插件来完全消除步骤4。
首先,安装postcss-purgecss软件包:
npm install @fullhuman/postcss-purgecss
然后,将Arslan答案中步骤2的代码替换为下面所示的代码(这样就不需要执行步骤4)。