SCSS 导入时 Angular 8 通用构建失败

KSh*_*ger 10 angular-universal angular

我正在使用 AngularCLI 和一个 Angular v8。关于 Angular Universal,我遇到了一个问题,在我运行这些命令后,这些命令是设置的准备步骤:

ng generate universal --clientProject <project_name>

npm install @nguniversal/module-map-ngfactory-loader    
npm install @nguniversal/express-engine

Add ModuleMapLoaderModule on AppServerModule
Run Code Online (Sandbox Code Playgroud)

或者

ng add @nguniversal/express-engine --clientProject <project_name>
npm run build:ssr && npm run serve:ssr
Run Code Online (Sandbox Code Playgroud)

当我运行ng build --configuration staging甚至运行时ng build --prod,构建成功且没有错误。

但是当我运行ng run app:server:stagingor 时ng run app:server:production,我会遇到如下错误:

ERROR in Module build failed (from ./node_modules/sass-loader/lib/loader.js):

@import 'base/colors';

Can't find stylesheet to import.

....
Run Code Online (Sandbox Code Playgroud)

angular.json有以下 SCSS 配置:

"schematics": {
    "@schematics/angular:component": {
      "styleext": "scss"
    }
  },

 ...

 "stylePreprocessorOptions": {
     "includePaths": [
     "src/",
     "src/assets/styles", 
     "node_modules"
    ]
 },
Run Code Online (Sandbox Code Playgroud)

想问一下我是否遗漏了什么或者是否有什么需要改变的?


已尝试重新安装或运行这些命令,但仍然没有运气:

rm -rf node_modules
rm package-lock.json
npm install
npm install node-sass
Run Code Online (Sandbox Code Playgroud)

安装 node-sass 时,从"Can't find stylesheet to import."错误消息,现在是"File to import not found or unreadable: base/colors."

Eli*_*Sh. 35

在运行相同的命令来构建 ssr“Angular Universal”时,我遇到了同样的问题“模块构建失败...无法找到要导入的样式表”。出于某种原因,构建过程忽略了“stylePreprocessorOptions”路径引用。

解决方案1

更改@import 引用以指向文件

例子

@import "~src/assets/styles/apptheme";
@import "~src/assets/styles/functiontheme";
Run Code Online (Sandbox Code Playgroud)

代替

@import "apptheme";
@import "functiontheme";
Run Code Online (Sandbox Code Playgroud)

解决方案2

打开 angular.json 查找“server”>>“options”并添加目录引用

"stylePreprocessorOptions": {
          "includePaths": [
            "src/assets/styles"
          ]
        }
Run Code Online (Sandbox Code Playgroud)

例子:

"server": {
      "builder": "@angular-devkit/build-angular:server",
      "options": {
        "outputPath": "dist/server",
        "main": "src/main.server.ts",
        "tsConfig": "tsconfig.server.json",
        "stylePreprocessorOptions": {
          "includePaths": [
            "src/assets/styles"
          ]
        }
      },....
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!虽然对我有用的是没有波形符(~),只是直接指定“@import”src/assets/styles/&lt;file_name&gt;”。不过,期待他们支持直接路径而不是指定完整路径 (2认同)