Repository navigation
Angular 6 CLI does not copy library's assets folder into dist folder. #11071
Description
Versions
Angular CLI: 6.0.7
Node: 9.3.0
OS: darwin x64
Angular: 6.0.3
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.6.7
@angular-devkit/build-angular 0.6.7
@angular-devkit/build-ng-packagr 0.6.7
@angular-devkit/build-optimizer 0.6.7
@angular-devkit/core 0.6.7
@angular-devkit/schematics 0.6.7
@angular/cdk 6.2.0
@angular/cli 6.0.7
@angular/material 6.2.0
@ngtools/json-schema 1.1.0
@ngtools/webpack 6.0.7
@schematics/angular 0.6.7
@schematics/update 0.6.7
ng-packagr 3.0.0
rxjs 6.2.0
typescript 2.7.2
webpack 4.8.3
Repro steps
- Create a library
@acme/lib1usingng generate library @acme/lib1 - Create assets folder under
projects/acme/lib1/assetsand add images - Add a
"projects" -> "@acme/lib1" -> "architect" -> "build" -> "options" -> "assets"key to the library's config withinangular.jsonfile. - Build library using
ng build @acme/lib1 - Fail error should show and none of the assets will be copied to
distfolder.
Observed behavior
Upon building & packaging an Angular 6 library e.g. @acme/lib1 using ng build @acme/lib1, the Angular CLI does not copy the library's assets into the dist/acme/lib1/assets folder. This happens also when using the --prod flag.
The CLI seems to only support copying the root app's assets but not library specific assets.
When trying to add "assets": ["src/assets"] to project @acme/lib1 within angular.json, the following error appears in the command line:
Schema validation failed with the following errors: Data path "" should NOT have additional properties(assets).
When creating the following custom rule to copying the files on ng build:
"assets": [
"src/favicon.ico",
"src/assets",
{ "glob": "**/*", "input": "src/assets", "output": "../acme/lib1/assets/" }
],
I get the following error:
An asset cannot be written to a location outside of the output path.
While it is possible to work around this issue using other command line tools/scripts, it will be more consistent to add support for library's assets copy as well.
Desired behavior
Use Case
Very often libraries include image files, icons, css files and other static files which are needed to be distrubted with the package.
What would like to see implemented?
Add ability to define a library specific assets property within angular.json.
Example -
"@acme/lib1": {
"root": "projects/acme/lib1",
"sourceRoot": "projects/acme/lib1/src",
"projectType": "library",
"prefix": "lib",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "projects/acme/lib1/tsconfig.lib.json",
"project": "projects/acme/lib1r/ng-package.json",
"assets": [ // <--------- this is currently not supported
"src/assets"
]
},
...}
What did you expect to see?
Project's specific assets should be copied from projects/acme/lib1/src/assets into dist/acme/lib1/assets.
Activity
ChrisWithTheHat commentedon Jun 6, 2018
Glad to see I'm not the only one with this problem.
bniedermeyer commentedon Jun 6, 2018
This is currently expected behavior from ng-packagr, which powers the library packaging process in the cli. The current suggestion is to copy manually after the build. I've heard mention that they will be addressing this in the future though.
See https://github.com/dherges/ng-packagr/issues/123#issuecomment-330029214
lammers commentedon Jun 12, 2018
this works for me (latest version)
"assets": [ { "glob": "**/*", "input": "src/assets", "output": "/assets" } ]@n00dl3 / @StickNitro: sorry for the missing context: above is related to Angular CLI 6 and the configuration I mentioned goes to angular.json
here is a complete project configuration in angular.json
assets are definitly copied for the karma tests:
"@lvm/core-components": {
"root": "projects/lvm/core-components",
"sourceRoot": "projects/lvm/core-components/src",
"projectType": "library",
"prefix": "cc",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "projects/lvm/core-components/tsconfig.lib.json",
"project": "projects/lvm/core-components/ng-package.json"
},
"configurations": {
"production": {
"project": "projects/lvm/core-components/ng-package.prod.json"
}
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "projects/lvm/core-components/src/test.ts",
"tsConfig": "projects/lvm/core-components/tsconfig.spec.json",
"karmaConfig": "projects/lvm/core-components/karma.conf.js",
"assets": [
{
"glob": "**/*",
"input": "src/assets",
"output": "/assets"
}
],
"preserveSymlinks": true
}
},
Environment
Angular CLI: 6.0.8
Node: 8.11.2
OS: linux x64
Angular: 6.0.4
StickNitro commentedon Jun 12, 2018
@lammers Could you expand on your answer please, where does this need to go for this to work?
n00dl3 commentedon Jun 12, 2018
@lammers I don't see how that would work, build-ng-packagr schema being like so, we cannot add any custom property :
{ "title": "ng-packagr Target", "description": "ng-packagr target options for Build Architect.", "type": "object", "properties": { "project": { "type": "string", "description": "The file path of the package.json for distribution via npm." }, "tsConfig": { "type": "string", "description": "The file path of the TypeScript configuration file." } }, "additionalProperties": false, "required": [ "project" ] }lammers commentedon Jun 13, 2018
ok .. I just recognized that my scenario is different .. my assets are in the main project and are copied with the configuration above for the karma tests of the library project.
bmhumadi commentedon Jun 25, 2018
Having the same problem. Please let us know how to fix, or when a fix is in?
mattezell commentedon Jun 29, 2018
It's not currently supported @bmhumadi #11317
fkolar commentedon Jul 7, 2018
I just logged similar issue and it seems right now the only solution is either again gulp tasks or running directly npm command.
Other than that for a library support and probably there already feature requests you need to have a option to release a version, so some command in the chain that is able to bump up the version !
Otherwise library support is good for some simple usecases, but its definitelly good step forward !
JBoothUA commentedon Jul 20, 2018
we need support for this also!
kawazoe commentedon Jul 20, 2018
I’m working on a big project, big enough that we were considering using nrwl also but the effort required to get our dozens of libraries setup to handle asserts correctly is a big hold up for the project.
I would love to see a simpler integration for assets as well.
bniedermeyer commentedon Jul 20, 2018
@fkolar This is a bit off topic, but we've managed to incorporate semantic-release into our Angular CLI Library release process. It's not perfect but we've been happy with it so far. The key for us was to change the
pkgRootkey in the config to point to the built library in thedistfolder. Our versions are based on git tags so we haven't run into issues with the version being determined incorrectly.You could probably use their exec plugin to script the syncing of the versions in the various
package.jsonfiles in your project.fkolar commentedon Jul 21, 2018
Thanks For the update. I have some solution for assets/resources and release cycle as well https://github.com/SAP/angular-metaui that I am using right now, its not perfect but better than nothing;-) Hopefully they will add in the next release or so.
nfriend commentedon Aug 2, 2018
Just to add another use case for this feature: when publishing a module to a private VSTS npm feed, it's required that the module include a
.npmrcfile at the root of the module that points to VSTS registry. Since this file doesn't get copied into thedistdirectory, the file must be manually copied after each build before publishing. This is a bit of a pain!Actually, scratch that: the
.npmrcfile needs to be at the root of the whole repository, not in thedistdirectory. So it works without this feature. Although I still agree that this feature would be great to have!alvics commentedon Aug 15, 2018
Why is this still not resolved?? Angular 6 not displaying assets,images after --prod build???? works fine locally! Finally ready for deploy and assets are not rendering at firebase after my ng build --prod? All my other projects have worked in the past and I missing something in the latest version?
26 remaining items
dhanarajknp commentedon Jun 26, 2019
Cossack13 commentedon Aug 23, 2019
Oh, so thank you, dhanarajknp! I used [] in the root folder name.
gauri-kumar commentedon Aug 23, 2019
Something ? Anything ??
lakhanmandloi commentedon Sep 13, 2019
I am using nodemon in my project. I have been able to copy the images in dist folder of library. https://github.com/Sunbird-Ed/sunbird-ui-components/blob/master/nodemon.json. This works
However, Now I am facing issues in using these images in the lib components.
klemenoslaj commentedon Sep 14, 2019
Well in the meantime I developed my own builder, that executes
@angular-devkit/build-ng-packagrand then follows with additional functionality like copying assets etc. That way I do not need to leave the realm ofngcommands and even logs fit perfectly.There is however one more thing...I had to configure application assets in
angular.jsonto copy the library assets so they are accessible during the runtime of the application.blemaire commentedon Sep 16, 2019
Brilliant @klemenoslaj could you share your implementation?
dhanarajknp commentedon Sep 16, 2019
klemenoslaj commentedon Sep 16, 2019
@blemaire in fact I just opened an issue in angular-builders for that very reason. I didn't want to create yet another package, I'd rather contribute there.
hiepxanh commentedon Oct 21, 2019
I can't understand how, It's been more than one year.
rorry121 commentedon Nov 11, 2019
Any news no this?
dhanarajknp commentedon Nov 14, 2019
fix: add `assets` option to schema
angular-automatic-lock-bot commentedon Jan 4, 2020
This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.
Read more about our automatic conversation locking policy.
This action has been performed automatically by a bot.