- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Angular 10.2.1 应用程序使用自定义 webpack 构建器在我的 .scss 文件中支持 PostCSS,这在 SPA 模式下工作得很好。
angular.json
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"customWebpackConfig": {
"path": "./webpack.config.js"
},
webpack.config.js
let plugins = [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
]
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loader: 'postcss-loader',
options: {
ident: 'postcss',
syntax: 'postcss-scss',
plugins: () => plugins
}
}
]
}
};
我决定根据官方文档使用 ng add @nguniversal/express-engine
添加 SSR 支持,但是当我尝试提供 SSR 版本时,出现错误:
ERROR in Module build failed (from ./node_modules/@angular-devkit/build-angular/node_modules/sass-loader/dist/cjs.js):
SassError: expected ";".
╷
90 │ @apply border-pink-200 !important;
│ ^
╵
src/app/app.component.scss 90:32 root stylesheet
这很有意义,因为 ng add @nguniversal/express-engine
添加到 angular.json 的 SSR 人工制品不使用我的自定义 webpack 配置。我已经查看了 @nguniversal/builders
和 @angular-builders
但找不到有关如何为 nguniversal 加载自定义 webpack 文件的任何信息。
这是我的完整 angular.json
文件:
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"hp24-frontend": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "hp24",
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"customWebpackConfig": {
"path": "./webpack.config.js"
},
"outputPath": "dist/hp24-frontend/browser",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/assets"
],
"styles": [
"src/styles/styles.scss"
],
"scripts": [],
"stylePreprocessorOptions": {
"includePaths": [
"src/styles"
]
}
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular-builders/custom-webpack:dev-server",
"options": {
"customWebpackConfig": {
"path": "./webpack.config.js"
},
"browserTarget": "hp24-frontend:build"
},
"configurations": {
"production": {
"browserTarget": "hp24-frontend:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "hp24-frontend:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles/variables/_colors.scss",
"src/styles/styles.scss"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json",
"tsconfig.server.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "hp24-frontend:serve"
},
"configurations": {
"production": {
"devServerTarget": "hp24-frontend:serve:production"
}
}
},
"server": {
"builder": "@angular-devkit/build-angular:server",
"options": {
"outputPath": "dist/hp24-frontend/server",
"main": "server.ts",
"tsConfig": "tsconfig.server.json"
},
"configurations": {
"production": {
"outputHashing": "media",
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"sourceMap": false,
"optimization": true
}
}
},
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
"options": {
"browserTarget": "hp24-frontend:build",
"serverTarget": "hp24-frontend:server"
},
"configurations": {
"production": {
"browserTarget": "hp24-frontend:build:production",
"serverTarget": "hp24-frontend:server:production"
}
}
},
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"browserTarget": "hp24-frontend:build:production",
"serverTarget": "hp24-frontend:server:production",
"routes": [
"/"
]
},
"configurations": {
"production": {}
}
}
}
}},
"defaultProject": "hp24-frontend"
}
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"lib": [
"es2018",
"dom"
],
"resolveJsonModule": true,
"esModuleInterop": true,
"types": ["googlemaps"]
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"debug": true
}
}
如有任何帮助,我们将不胜感激。 :)
最佳答案
解决方案是在 nguniversal 添加的服务器工件中将 @angular-devkit/build-angular:server
替换为 @angular-builders/custom-webpack:server
angular.json
像这样:
"server": {
"builder": "@angular-builders/custom-webpack:server",
"options": {
"customWebpackConfig": {
"path": "./webpack.config.js"
},
"outputPath": "dist/hp24-frontend/server",
"main": "server.ts",
"tsConfig": "tsconfig.server.json"
},
"configurations": {
"production": {
"outputHashing": "media",
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"sourceMap": false,
"optimization": true
}
}
},
这似乎也修复了 serve-ssr
和 prerender
人工制品,因为它们在内部调用 server
。所以现在我可以将所有 nguniversal npm 脚本与我自己的自定义 webpack 配置一起使用。
关于带有 @nguniversal 的 Angular SSR 和用于 PostCSS 支持的自定义 webpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64666158/
我正在尝试安装 Tailwind 来练习一些基本知识,以了解该框架的工作原理。我遵循了框架的创建者 Adam Wathan 提供的每一步,在运行时我遇到命令行错误:您必须传递一个有效的文件列表来解析。
来自 PostCSS 插件的未知错误。您当前的 PostCSS 版本是 8.3.0,但 postcss-preset-env 使用的是 7.0.36。 有谁知道为什么会发生这个错误? 最佳答案 您可能
每当我运行 npm start 时,我都会收到此错误。 我尝试了几个修复程序,但没有一个对我有用。我试图将 autoprefixer 的版本更改为 9.8.6 但它没有用。 请帮我解决这个问题 这是我
我正在尝试使用 PostCSS Sass Color Function .我收到此错误: Unknown error from PostCSS plugin. Your current Pos
我正在按照这个示例快速介绍 postcss: https://www.sitepoint.com/an-introduction-to-postcss/ 安装后postcss和 autoprefixe
我正在尝试将 tailwind 与 hexo 结合使用。看起来来自 https://tailwindcss.com/docs/installation/#using-tailwind-with-pos
目的是什么: PostCSS Autoreset PostCSS Initial 两者的文档都非常稀疏,并没有真正解释为什么应该使用它们以及它们的目的是什么。 我试过自动重置。它似乎将 all: in
我安装了新的 tailwindcss 2.0 版,但出现以下错误。我试图卸载 postcss 和 tailwindcss 但它不起作用。需要帮忙。 Module build failed (from
我有这个源文件为 src/mike.js import '@ckeditor/ckeditor5-ui/theme/globals/globals.css' export default functi
如何在本地安装 postcss 模块,并通过全局安装的 postcss-cli 使用它们? 例如: postcss -u autoprefixer -o style.css index.css 如果我
如何在本地安装 postcss 模块,并通过全局安装的 postcss-cli 使用它们? 例如: postcss -u autoprefixer -o style.css index.css 如果我
我用cssnext写我的css :root{ --ellipsis: { overflow: hidden; text-overflow: ellipsis;
我最近开始实现 CSS 自定义属性,但需要支持 IE11 - 因此需要 postcss-preset-env。到目前为止,我发现 Angular 的 webpack 配置不是很可定制,但我已经安装了自
我在 gruntfile.js 中使用 grunt-postcss,除了 postcss-bem-linter 之外,一切正常,如果不遵循 BEM 规则,它应该在控制台中记录警告。这是 gruntfi
这是我的 Webpack scss/css 的配置文件。 ... { test: /\.s?css$/, use: [ 'style-loader', { lo
我正在学习如何使用postcss-bem生成bem风格的css文件,但我想知道是否有一些像 CSS-Modules 或 Postcss-JS 这样的包,我可以用它们来做如下的事情: const Rea
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试使用 Webpack 5、Tailwind CSS 和 Typescript 从头开始创建一个全新的 React 应用程序。结合几个教程后,我不知道如何让 postcss-loader
所以今天我一直在尝试将 postcss-loader 从版本 3.0.0 迁移到 4.0.2 我注意到自版本 4.0.0 以来,他们添加了 postCSS 作为对等依赖项,因此我添加了 postcss
当我 npm start 时出现此错误我的 react 项目。谁能解决这个问题? ./src/index.scss (./node_modules/css-loader/dist/cjs.js??re
我是一名优秀的程序员,十分优秀!