我目前正在尝试将Angular 2.something项目升级到最新版本。我有一个自定义的angular.config文件,因此可以构建2个使用相同组件“库”的应用程序。但是随后,Angular 6的史诗发布随真正的Angular库一起发布!但是现在(再次)我被困在试图将我的项目重构到这个新版本。
我已经将一个组件库(名为“ core”)构建到一个DIST文件夹中。这个库甚至连Typescript都可以。但是,当我尝试构建Web应用程序时,Angular CLI开始抱怨它找不到模块“核心”。
以下代码段是文件夹dist / core中的public_api.d.ts:
export { WdCoreModule } from './lib/wd-core.module';
export { wdApi } from './lib/core/wd.service';
export { ProcessTokenComponent } from './lib/core/process-token.component';
export { GroupByPipe } from './lib/core/group-by.pipe';
export { AvatarComponent } from './lib/avatar/avatar.component';
export { GameElementsModule } from './lib/game-elements/game-elements.module';
export { AchievementsComponent } from './lib/game-elements/achievements/achievements.component';
export { ModalComponentComponent } from './lib/modal-component/modal-component.component';
export { BaseModalService, BaseModalComponent } from './lib/core/basemodal.service';
export { NavMenuComponent } from './lib/nav-menu/nav-menu.component';
.... More exports ahead
我在tsconfig.json中添加了该库的路径
"paths": {
"core": [
"dist/core"
],
"core/*": [
"dist/core/*"
],
}
然后是时候从“核心”库中将模块和组件导入名为“ cms”的应用程序了。
import { WdCoreModule } from 'core';
尚无错误!
现在,我准备使用以下项目来构建我的项目:ng serve cms
这将引发以下错误:
projects / cms / src / app / app.module.ts(52,30):错误TS2307:找不到模块“核心”。
我一直在寻找解决这个问题的方法,但是我有点卡住了。 有编码专家可以帮助我吗?
编辑:解决方案的其他信息
我按照以下文章打包并安装了我的构建库
https://blog.angularindepth.com/creating-a-library-in-angular-6-part-2-6e2bc1e14121
以下2条命令对我有用:
//package.json
"npm_pack": "cd dist/core && npm pack",
//then
npm install dist/core/core-0.0.1.tgz --save
答案 0 :(得分:3)
您应该在您的packages.json中链接您的构建库(.tgz)。 ts.config路径仅用于开发时间。
答案 1 :(得分:0)
我遇到了同样的问题,找到了不需要在开发过程中打包库的解决方案
我解决了该问题,并将路径也添加到应用程序目录中存在的tsconfig.app.json文件中
{
"compilerOptions": {
...
"paths": {
"ika-admin-lib": [
"../dist/name-lib"
],
"ika-admin-lib/*": [
"../dist/name-lib/*"
]
}
}
(此处是更多上下文,http://codecleane.rs/2019/07/09/fixing-error-ts2397-cannot-find-module-angular-custom-library/)
答案 2 :(得分:0)
在开发过程中,tsconfig.json中的路径出现了相同的错误。 我通过将路径放在/projects/myproject/tsconfig.app.json
下的应用程序级别tsconfig中解决了该问题 "mylib": [
"../../dist/mylib"
],
"mylib/*": [
"../../dist/mylib/*"
]
我没有任何来源或文档,没有足够的理由。无论我读过什么文章,都建议在父目录中使用路径,并且似乎对它们有用,也许这些路径适用于其他版本。我刚刚看到了应用程序级别tsconfig.app.json,并想到将路径放在那里并尝试一下,它确实有效。我不知道为什么将路径放在父tsconfig.json中不起作用。
这是我的版本输出的摘录-
Angular CLI: 7.2.4
Angular: 7.2.16
@angular-devkit/build-angular 0.12.4
@angular-devkit/build-ng-packagr 0.12.4
@angular-devkit/build-optimizer 0.12.4
@angular-devkit/build-webpack 0.12.4
ng-packagr 4.7.1
typescript 3.2.4
几件事要注意-
"paths": {
"mylib": [
"dist/mylib"
],
"mylib/*": [
"dist/mylib/*"
]
}
最初,我只是想评论Maurizio Pozzobon的回答,说我做了同样的事情,并且在开发过程中对我有用。但是作为一个新手,它不允许我添加评论。因此,请考虑使用更多信息来编写此答案。