Library and Angular CLI app in a monorepo (Module not found: import paths cannot be resolved)
See original GitHub issueType of Issue
- Bug Report
- Feature Request
Description
After trying it on a dead simple app and failed, i cloned the example repo, ng-packaged, and got the same exact error. It builds without a problem, but the moment you try to import the lib to the app you get the error
ERROR in ./src/app/app.module.ts
Module not found: Error: Can't resolve '@my/lib' in 'D:\Work\testing\Angular2\ng-packaged\src\app'
resolve '@my/lib' in 'D:\Work\testing\Angular2\ng-packaged\src\app'
Parsed request is a module
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src/app)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src/app)
resolve as module
D:\Work\testing\Angular2\ng-packaged\src\app\node_modules doesn't exist or is not a directory
D:\Work\testing\Angular2\ng-packaged\src\node_modules doesn't exist or is not a directory
D:\Work\testing\Angular2\node_modules doesn't exist or is not a directory
D:\Work\node_modules doesn't exist or is not a directory
D:\node_modules doesn't exist or is not a directory
looking for modules in D:\Work\testing\Angular2\ng-packaged\node_modules
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules)
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules/@my/lib)
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib.ts doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib.js doesn't exist
as directory
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib doesn't exist
looking for modules in D:\Work\testing\node_modules
No description file found
Field 'browser' doesn't contain a valid alias configuration
No description file found
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\node_modules\@my\lib doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\node_modules\@my\lib.ts doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\node_modules\@my\lib.js doesn't exist
as directory
D:\Work\testing\node_modules\@my\lib doesn't exist
looking for modules in D:\Work\testing\Angular2\ng-packaged\node_modules
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules)
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./node_modules/@my/lib)
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib.ts doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib.js doesn't exist
as directory
D:\Work\testing\Angular2\ng-packaged\node_modules\@my\lib doesn't exist
looking for modules in D:\Work\testing\Angular2\ng-packaged\src
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src)
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src/@my/lib)
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib.ts doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib.js doesn't exist
as directory
D:\Work\testing\Angular2\ng-packaged\src\@my\lib doesn't exist
looking for modules in D:\Work\testing\Angular2\ng-packaged\src
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src)
Field 'browser' doesn't contain a valid alias configuration
after using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src)
using description file: D:\Work\testing\Angular2\ng-packaged\package.json (relative path: ./src/@my/lib)
no extension
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib.ts doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
D:\Work\testing\Angular2\ng-packaged\src\@my\lib.js doesn't exist
as directory
D:\Work\testing\Angular2\ng-packaged\src\@my\lib doesn't exist
The angular app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { MyLibModule } from '@my/lib';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
MyLibModule.forRoot()
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
tsconfig.app.json
{
"extends": "../tsconfig.json",
"angularCompilerOptions": {
"paths": {
"@my/lib": [ "../dist/my-lib" ]
}
},
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "",
"types": [],
"paths": {
"@my/lib": [ "../dist/my-lib" ]
}
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
main tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
],
"paths": {
"@my/lib": [ "dist/my-lib" ]
}
},
"exclude": [
".ng_build"
]
}
How To Reproduce
$ yarn install $ yarn build:lib $ ng serve
Version Information
ng-packagr: v1.0.1
node: v8.1.2
@angular: v4.3.2
rxjs:
zone.js:
Issue Analytics
- State:
- Created 6 years ago
- Comments:15 (6 by maintainers)
Top Results From Across the Web
Angular CLI 9 (Ivy) App build with local library (mono-repo ...
So even though my main tsconfig had the paths correctly defined to point to the ./dist lib folder, the app build couldn't get...
Read more >Creating libraries - Angular
This page provides a conceptual overview of how to create and publish new libraries to extend Angular functionality. If you find that you...
Read more >nrwl-nx/community - Gitter
I moved the contents of the folder into libs/components/src/lib, but none of the files are found because it seems like the lib only...
Read more >Setup a Monorepo with PNPM workspaces and speed it up ...
In this article we're going to have a deep dive into setting up a new monorepo using PNPM workspaces that hosts a Remix...
Read more >@angular-architects/module-federation - npm
Seamlessly using Webpack Module Federation with the Angular CLI. ... a library across all your micro frontends (apps) in your mono repo.
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
For anyone with a similar issue, my way of solving this was not to symlink (tested on windows only using both soft and hard links). For some reason this just won’t work. What does work though is copying the dist output to your node_modules folder.
I ended up using a chokidar watcher which builds the package and then copies the dist to node_modules.
@dherges thanks for your time
@dherges when creating the symlink to node_modules it does seem to import it, but it produces the following error
Sure enough the exported module looks like this
So, using the symlink trick, do we still have to add something to the app tsconfig or am i missing something?