@angular/cli
で作成したAngular 7アプリケーションがあり、ng generate library
を使用してライブラリを追加しました。 dev
モードなどで正常に動作します。問題ありません。
含まれるライブラリに関連する依存関係を保持したいと思います。メインアプリケーションのpackage.json
を乱雑にしないでください。したがって、当然、ライブラリフォルダーに対してnpm install --save [xyx]
を実行しました。それはうまくいきました。 dev
モードでも引き続き問題なく動作します。
しかし、ng build --prod
を実行しようとすると、突然、ライブラリの一部である依存関係が見つかりません。もちろん、その理由は明らかです。それらは適切にバンドルされていません。私はnpm
のbundleDependencies
機能を調査しましたが、lib: { embedded: ... }
およびwhitelistedNonPeerDependencies
オプションを調べましたng-package.json
、しかし、私はそれらのどれもが私が望むことを全くさせることができないようです。
これはメーカーまたはブレークの要件ではありません。絶対に必須の場合は、メインアプリケーションに依存関係をインストールするだけです。しかし、私はそれをとても避けたいです。おそらくそれは不合理な目標だろう、私は確信していない。
どんな助けも大歓迎です。
あなたがローカルで説明したことをしようとしましたが、問題はありませんでした。ここに私がとったステップがあります。
npm install @angular/cli
node_modules/.bin/ng new installtest
cd installtest
node_modules/.bin/ng generate library libtest
cd projects/libtest
npm install --save numeral
npm install --save-dev @types/numeral
ro.pipe.ts
をprojects/libtest/src
に追加しました
import { Pipe, PipeTransform } from '@angular/core';
import * as numeral from 'numeral';
@Pipe({name: 'decimalUnit'})
export class RoPipe implements PipeTransform {
constructor() {
numeral.register('locale', 'ro', {
delimiters: {
thousands: '.',
decimal: ','
},
abbreviations: {
thousand: 'k',
million: 'm',
billion: 'b',
trillion: 't'
},
ordinal: function (number) {
return number === 1 ? 'er' : 'ème';
},
currency: {
symbol: 'RON'
}
});
numeral.locale('ro');
}
public transform(value: string, numDecimals: number) {
const b = numeral(value);
let x = '0,0.';
for (let i = 0; i < numDecimals; i++) {
x = x + '0';
}
return b.format(x);
}
}
projects/libtest/src/lib/libtest.module.ts
を更新
import { NgModule } from '@angular/core';
import { LibtestComponent } from './libtest.component';
import { RoPipe } from './ro.pipe';
@NgModule({
declarations: [LibtestComponent, RoPipe],
imports: [
],
exports: [LibtestComponent, RoPipe]
})
export class LibtestModule { }
projects/libtest/src/public_api.ts
を更新
export * from './lib/libtest.service';
export * from './lib/libtest.component';
export * from './lib/libtest.module';
export * from './lib/ro.pipe';
tsconfig.json
を更新します。 "projects/libtest/node_modules/@types"
を"typeRoots"
配列に追加します
src/app/app.module.ts
を更新
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { LibtestModule } from 'projects/libtest/src/public_api';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
LibtestModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
src/app/app.component.html
を更新
<label>{{ '12345678' | decimalUnit:2 }}</label>
<br>
<label>{{ '12345678' | decimalUnit:0 }}</label>
<br>
<label>{{ '12345678' | decimalUnit:2 }}</label>
<br>
<label>{{ '12345678' | decimalUnit:2 }}</label>
<br>
<label>{{ '12345678' | decimalUnit:2 }}</label>
その後、npm run start
を実行して、devビルドで機能することを確認しました。次に、npm run start -- --prod
を実行して、prodビルドで機能することを確認しました。両方とも機能しました。最後にしたことは、npm run build
およびnpm run build -- --prod
を実行し、IISを介してWebサイトをロードすることでした。どちらも機能しました。完全なレポジトリプロジェクトを参照用に GitHub に配置しました。
実際には [〜#〜] mvce [〜#〜] を提供していません。そのため、特定のプロジェクトが現在動作していない理由を説明するのは困難です。上記の手順で問題が解決しない場合は、失敗したこと(または、発生している問題を再現できる最小限のプロジェクト)について、詳細に説明してください。
私の知る限り、これは不可能です。
「問題」をいくらか解決するために、完全に新しいcliプロジェクトを作成できます。新しいプロジェクトで、ライブラリと他の将来のライブラリを生成します。新しいプロジェクトは、ライブラリのショーケース/ドキュメントになる場合があります。この方法では、すべてのライブラリが同じバージョンの依存関係を使用しますが、メインアプリケーションには含まれません。