J'ai un Angular 7 application que j'ai créé avec le @angular/cli
et puis j'ai ajouté une bibliothèque à l'aide de ng generate library
. Cela fonctionne très bien dans le mode dev
et autres. Il n'y a pas de problèmes.
J'aimerais conserver les dépendances pertinentes pour la bibliothèque qui y est contenue; Et ne pas encombrer le package.json
de l'application principale. Alors, naturellement, j'ai npm install --save [xyx]
dans le dossier de la bibliothèque. Cela a bien fonctionné. Fonctionne toujours très bien en mode dev
.
Mais quand j'essaie de faire ng build --prod
, soudain, il ne peut pas trouver les dépendances qui font partie de la bibliothèque. La raison en est évidente, bien sûr; Ils ne sont pas correctement intégrés. J'ai étudié la fonctionnalité npm
de bundleDependencies
en vain, et j’ai examiné les options lib: { embedded: ... }
et whitelistedNonPeerDependencies
pour ng-package.json
, mais je n'arrive pas à leur demander de faire ce que je veux. .
Ce n'est pas une exigence décisive; Si c'est absolument obligatoire, je vais simplement installer les dépendances dans l'application principale. Mais j'aimerais bien éviter cela. Peut-être que c'est un objectif déraisonnable, je ne suis pas sûr.
Toute aide serait grandement appréciée.
J'ai essayé de faire ce que vous avez décrit localement sans problème. Voici les étapes que j'ai prises.
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
ajouté 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);
}
}
mettre à jour 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 { }
mettre à jour 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';
mettre à jour tsconfig.json
. ajouter "projects/libtest/node_modules/@types"
à "typeRoots"
tableau
mettre à jour 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 { }
mettre à jour 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>
Après cela, j'ai exécuté npm run start
pour vérifier qu'il fonctionne avec la version de développement. Ensuite, j'ai exécuté npm run start -- --prod
pour vérifier qu'il fonctionne avec la version de production. Les deux ont travaillé. La dernière chose que j'ai faite a été d'exécuter npm run build
et npm run build -- --prod
et de charger le site Web via IIS, qui ont tous deux fonctionné. Je mets le projet de repo complet sur GitHub pour référence.
Vous ne fournissez pas vraiment un MVCE . Il est donc difficile de vous dire pourquoi votre projet ne fonctionne pas pour le moment. Si les étapes ci-dessus ne vous conviennent pas, veuillez fournir plus de détails sur ce que vous avez essayé de faire et qui échoue (ou au moins sur un projet minimal capable de reproduire le problème rencontré).
Pour autant que je sache, ce n'est pas possible.
Pour résoudre un peu votre "problème", vous pouvez créer un nouveau projet cli. Dans le nouveau projet, générez votre bibliothèque et d’autres bibliothèques futures. Le nouveau projet peut être une vitrine/une documentation pour vos bibliothèques. De cette façon, toutes vos bibliothèques utiliseront la même version des dépendances mais ne seront pas incluses dans votre application principale.