如何将静态 CSS 添加到 Dojo 7 应用程序,例如字体真棒?

How to add static CSS to Dojo 7 application e.g. FontAwesome?

我有一个使用 dojo-cli 工具构建的相当基本的 Dojo 7 (Dojo 2) 应用程序。现在我想给它添加 FontAwesome 图标。我有一个 Pro 订阅,所以我有一个 zip 文件,其中包含 css 的各种文件夹和我想包含在我的项目中的网络字体文件,然后是 link 到 index.html。我相信 Dojo 构建过程使用 webpack,我对它的了解非常有限。

我可以 link 到 src/index.html 中的 fontawesome CDN 免费版本,效果很好:

<!link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.3/css/all.css" integrity="sha384-SZXxX4whJ79/gErwcOYf+zWLeJdY/qpuqC4cAa9rOGUstPomtqpuNWT9wdPEn2fk" crossorigin="anonymous">

https://dojo.io/learn/building/static-assets 的 Dojo 2 教程说我可以将静态资产放在 assets 文件夹中,所以我将 zip 文件解压缩到 assets/fontawesome-pro-5.15.3-web 并尝试 link它在 src/index.html:

<link rel="stylesheet" href="assets/fontawesome-pro-5.15.3-web/css/all.min.css">

我的意图是以传统方式使用 FontAwesome,而不是使用 CSS 模块。

<i class="fas fa-question-mark"></i>

dojo 构建过程在将 assets 内容复制到 output/dev/assets 时发出大量“正在复制文件 blah.css”,我在 output/dev/assets/fontawesome-pro-5.15.3-web 中看到了 FontAwesome 文件,但是构建给出:

Html Webpack Plugin:
  Error: Child compilation failed:
  Module not found: Error: Can't resolve './assets/fontawesome-pro-5.15.3-web' i  n '/home/username/go/projectname/src':
  Error: Can't resolve './assets/fontawesome-pro-5.15.3-web' in '/home/username/go/projectname/src'
  
  - compiler.js:79 
    [travesty]/[html-webpack-plugin]/lib/compiler.js:79:16

我注意到它是相对于 /home/username/go/projectname/src 的引用,并且原始 assets 文件夹在源代码树中比它高一级,所以我也在 src/index.html 中尝试了这个相对路径:

<link rel="stylesheet" href="../assets/fontawesome-pro-5.15.3-web/css/all.min.css">

但这失败的方式不同:

Html Webpack Plugin:
  Error: /home/username/go/projectname/src/index.html:97
  module.exports = __webpack_public_path__ + "all.min.30RjDni8.css";
                   ^
  ReferenceError: __webpack_public_path__ is not defined
  
  - index.html:97 Object../assets/fontawesome-pro-5.15.3-web/css/all.min.css
    /home/username/go/projectname/src/index.html:97:18

我在创建 assets/simple.css 文件和 link 使用 <link rel="stylesheet" href="assets/simple.css"> 时得到非常相似的结果,所以根据我对 webpack 的理解,这似乎是一个普遍的问题。 =34=]

我应该对这些 FontAwesome 文件使用“静态资产”方法吗?如果是,我该如何解决这种构建情况,或者我应该尝试使用这个第三方 CSS 库作为 CSS 模块,如果有,怎么办?

这可能与 webpack 的“publicPath”概念有关,请参阅 https://webpack.js.org/guides/public-path/ .. 如果是这样,我想我需要对我的 .dojorc 做一些事情来控制 Dojo 构建对webpack.

感谢 Dojo discord 频道上的@agubler,修复显然很简单:

<link rel="stylesheet" href="/assets/fontawesome-pro-5.15.3-web/css/all.min.css">

构建并运行良好。使用这样的绝对 URL 感觉很脏,所以如果有人有更丰富的解释性答案,我很乐意将其标记为答案而不是这个 :)