Not the answer I hoped for, but thanks anyway.
Hi maliming
Thanks for the suggestion. The workaround works. However:
We had hoped that we could include the Theme Builder files in our shared-ui library project.
It would really help if you could introduce some sort of ‘basePath’/‘sourceRoot’ for Theme Builder files. Perhaps in *.abpsln/*.abpmdl? No UI configuration required :-)
It would help to keep our project structure tidy.
Probably you could consider that. Thank you, Florian
angular.json, see shared-ui section at the end:
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"app-one": {
"projectType": "application",
"root": "projects/app-one",
"sourceRoot": "projects/app-one/src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
"outputPath": { "base": "dist/app-one" },
"index": "projects/app-one/src/index.html",
"polyfills": ["projects/app-one/src/polyfills.ts"],
"tsConfig": "projects/app-one/tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": [
"projects/app-one/src/favicon.ico",
"projects/app-one/src/assets",
{ "glob": "**/*", "input": "projects/shared-ui/images", "output": "/images/" }
],
"styles": [
{
"input": "node_modules/@volosoft/ngx-lepton-x/assets/css/font-bundle.css",
"inject": false,
"bundleName": "font-bundle"
},
{
"input": "node_modules/@volosoft/abp.ng.theme.lepton-x/assets/css/abp-bundle.css",
"inject": false,
"bundleName": "abp-bundle"
},
// ---- generated by Theme Builder: workspace-root relative, outside any sourceRoot ----
{ "input": "src/assets/styles/light.css", "inject": false, "bundleName": "light" },
{ "input": "src/assets/styles/dark.css", "inject": false, "bundleName": "dark" },
{ "input": "src/assets/styles/dim.css", "inject": false, "bundleName": "dim" },
// ... more entries
// ---- end Theme Builder output ----
"projects/app-one/src/styles.scss"
]
}
},
"serve": { "builder": "@angular/build:dev-server" },
"test": { "builder": "@angular/build:unit-test" },
"lint": { "builder": "@angular-eslint/builder:lint" }
}
},
"app-two": {
"projectType": "application",
"root": "projects/app-two",
"sourceRoot": "projects/app-two/src",
"prefix": "pub",
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
"outputPath": { "base": "dist/app-two" },
"browser": "projects/app-two/src/main.ts",
"index": "projects/app-two/src/index.html",
"polyfills": ["projects/app-two/src/polyfills.ts"],
"tsConfig": "projects/app-two/tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": [
"projects/app-two/src/assets",
{ "glob": "**/*", "input": "projects/shared-ui/images", "output": "/images/" }
],
"styles": [
// same Theme Builder entries as app-one -- both apps are forced to
// share the single workspace-root output folder
{ "input": "src/assets/styles/light.css", "inject": false, "bundleName": "light" },
{ "input": "src/assets/styles/dark.css", "inject": false, "bundleName": "dark" },
// ... more entries
"projects/app-two/src/styles.scss"
]
}
},
"serve": { "builder": "@angular/build:dev-server" },
"test": { "builder": "@angular/build:unit-test" },
"lint": { "builder": "@angular-eslint/builder:lint" }
}
},
"shared-core": {
"projectType": "library",
"root": "projects/shared-core",
"sourceRoot": "projects/shared-core/src",
"prefix": "lib",
"architect": {
"build": { "builder": "@angular/build:ng-packagr" },
"test": { "builder": "@angular/build:unit-test" },
"lint": { "builder": "@angular-eslint/builder:lint" }
}
},
"shared-ui": {
// Theme Builder entries should live here :) <---
"projectType": "library",
"root": "projects/shared-ui",
"sourceRoot": "projects/shared-ui/src",
"prefix": "lib",
"architect": {
"build": { "builder": "@angular/build:ng-packagr" },
"test": { "builder": "@angular/build:unit-test" },
"lint": { "builder": "@angular-eslint/builder:lint" }
}
}
}
}
Hi,
Thanks for the clear answer.
To your question: our Angular side is not the single-app default template layout. It's a multi-project Angular CLI workspace (newProjectRoot: "projects") containing two ABP-based applications plus a couple of shared libraries. Each application has its own root/sourceRoot under projects/<app>/…, so the workspace root has no application of its own and no meaningful src folder.
Theme Builder writes the generated CSS to <workspace-root>/src/assets/css and <workspace-root>/src/assets/styles, and points the styles entries in angular.json at those root-relative paths. That folder is outside every project's sourceRoot, which gives us two problems:
The generated files don't live with the app that consumes them, so they aren't covered by the app's assets configuration, so we have to move them on every change in Theme Builder.
We want to have the apps the same theme and share it.
What would help us is if the output location followed the selected project instead of the workspace root — i.e. writing to the project's own sourceRoot (projects/<app>/src/assets/css and projects/<app>/src/assets/styles) as resolved from angular.json, and generating the styles entries accordingly. A plain configurable output path per project would work just as well for us.
Is support for such a workspace layout something you could consider on your side? Happy to provide a trimmed-down angular.json if that helps.
Thanks
<workspace-root>/
angular.json
package.json
src/ <-- problem: no application here; only Theme Builder output lands in it ...
assets/
css/
styles/
projects/
app-one/ src/ <-- sourceRoot of application 1
app-two/ src/ <-- sourceRoot of application 2
shared-core/src/
shared-ui/ src/
Hi @maliming Thanks for clarifying the release process. So then we were a little too fast. Probably you should mention this in your release blog-post. Thanks, Florian
ABP.IO 10.5 has been released final. if I do an abp update, I still receive the nuget packages from 10.4.1.
abp update [13:12:02 INF] Volo packages are updated in fullbench-dll solution [13:12:02 INF] Package: "Volo.Abp.AspNetCore.Mvc-v10.4.1" is up to date [13:12:02 INF] Package: "Volo.Abp.PermissionManagement.Application.Contracts-v10.4.1" is up to date [13:12:02 INF] Package: "Volo.Abp.BackgroundJobs.Domain.Shared-v10.4.1" is up to date [13:12:02 INF] Package: "Volo.Abp.AspNetCore.Mvc-v10.4.1" is up to date [13:12:02 INF] Package: "Volo.Abp.AspNetCore.Mvc-v10.4.1" is up to date [13:12:02 INF] Package: "Volo.Abp.EntityFrameworkCore.SqlServer-v10.4.1" is up to date ... more logs