angular-cli library create secondary entry point

后端 未结 3 1957
眼角桃花
眼角桃花 2021-02-13 18:26

I am trying to create what I believe is called a secondary entry point into my angular npm package. I want the following two entry points

@scope/data-service
@sc         


        
3条回答
  •  失恋的感觉
    2021-02-13 18:39

    I'm afraid that this is not an easy task with ng-packagr.

    For every "project" that you try to package, ng-packagr automatically detects all secondary packages.

    ng-packagr ignores tsconfig.lib.json files of secondary packages, it will use the tsconfig file provided with the primary package.

    It then loads a TS program for the primary and all secondaries, before compiling, with the tsconfig of the primary.

    This is done this way so the packager can then parse the code and create a dependency tree, which will tell it which package to render first, 2nd etc... YES, it also means that ng-packagr DOES NOT assume that a secondary package always depends on the primary, it might be the other way and it's valid...

    Now, up to this point everything should be ok, no errors etc... A TS program is created for all packages but without emitting anything so all is good.

    The error you see comes in the compilation phase, where the compiler try to emit files and throws. This is when ng-packagr logs "Compiling TypeScript sources through ngc"

    At this point, typescript is not happy with the reference to a file outside of the root, which is the case.

    One solution is to update the paths property in tsconfig to point to the output directory for every package that was built. So if package A was just compiled, we change/create paths record that points to the output library which will not be considered as a TS source... thus no error.

    This will work, I have tested it, but sadly it requires some work either in ng-packagr source code or, as I did it, using a custom angular devkit builder...

    With it you can replace the paths right after each compilation has finished, so next compilation will reference the built output and not the source code.

    Because ng-packagr build packages based on dependency graph we are safe to assume that this will work.

提交回复
热议问题