静态资源处理

icejs 内置了大量规则处理静态资源,一般情况下开发者无需设置资源的处理方式,而对于一些特殊的处理规则框架同样给出了便捷方式和指引,保证 Webpack 和 Vite 模式下静态资源规则指定方式的一致性。

基础规则

框架内置了针对以下资源的处理:

  • 字体文件:.woff.woff2.ttf.eot
  • sgv 文件 .svg
  • 图片资源 .png.jpg.webp.jpeg.gif

上述资源默认通过资源地址加载,推荐将这些资源放在 src/assets 目录下:

  1. src
  2. ├── assets/
  3. ├── logo.png
  4. └── bg.png // Favicon

此时即可在代码中使用这些资源:

  1. import logoUrl from '@/assets/logo.png';
  2. function Home() {
  3. return (
  4. <>
  5. <img src={logoUrl} />
  6. </>
  7. );
  8. }

如果资源尺寸小于 8kb,则进行 base64 转码并内联到脚本或样式文件中。

指定处理规则

对于内置规则不满足特定场景的情况下,框架提供了便捷的方式对资源进行处理

URL 引入

除基础规则中指定资源外,如果还希望通过资源地址的方式进行资源处理的,可以通过如下方式进行指定:

  1. import workletURL from 'extra-scalloped-border/worklet.js?url'
  2. CSS.paintWorklet.addModule(workletURL);

?url 在 webpack 模式下等同于为指定资源指定 url-loader

文件内容引入

通过 ?raw 后缀声明将资源作为字符串引入:

  1. import txtContent from './text.txt?raw';

?raw 在 webpack 模式下等同于为指定资源指定 raw-loader

Worker 引入

脚本可以通过指定后缀引入为 web worker:

  1. import Worker from './worker.js?worker'

?worker 在 webpack 模式下等同于为指定资源指定 worker-loader

  1. import Worker from './worker.js?sharedworker'

?sharedworker 在 webpack 模式下等同于为指定资源指定 worker-loader,并指定 worker 类型为 SharedWorker

  1. import Worker from './worker.js?worker&inline'

?worker&inline 在 webpack 模式下等同于为指定资源指定 worker-loader,并指定配置 { inline: 'fallback'}

public 目录

public/ 目录作为框架默认的静态资源目录,除了存放页面模版 index.html 文件之外,不被工程构建工具进行编译的资源都可以放在该目录下。

比如 favicon.svg 文件,我们并不希望该文件名编译(默认静态资源文件名在编译后会生成独立 hash,favicon.svg 希望保持原有文件名),在使用时直接在 html 模版中进行引用:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
  5. </head>
  6. </html>

另外像不被源码引入的资源也存放在 public 目录下,比如设置 externals 后的 umd 链接,在不使用 CDN 的情况下,同样可以直接放在 public 目录下。

public 目录中的资源在开发时能直接通过 / 根路径访问到,并且打包时会被完整复制到目标目录的根目录下。