ローカルで開発したAngularプロジェクト/モジュールをangularアプリケーションにnpmリポジトリに公開せずにインポートしようとしています。
まず、このチュートリアルに従ってモジュールをUMD形式でビルドしました(公開の部分は省略しました)。
https://medium.com/@cyrilletuzi/how-to-build-and-publish-an-angular-module-7ad19c0b4464
次に、次のコマンドラインを実行して、最終的なアプリケーションにモジュールをインストールしようとしました。
npm install ../path-to-my-module --save
これにより、アプリケーションの@myscope/myModule
にpackage.json
としてモジュールが正常に追加されましたが、問題は、アプリケーションへのモジュールのインポートが認識されないことです。最終的に次のエラーが発生しました:
Cannot find module @myscope/myModule
私のnode_modules
に、フォルダー@myscope
が作成され、その中にmyModule
という名前の../path-to-my-module
へのショートカットがあります
ショートカットがあるということが問題の原因なのでしょうか?もしそうならそれを修正する方法?
私は私の問題を解決するのに役立つこの記事を見つけました:
簡単に要約すると、これは私が進めた方法です:
npm install -g ng-packagr
npm install ng-packagr --save-dev
ng-package.json
をプロジェクトのルートフォルダーに追加し、以下を追加します。{
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
"lib": {
"entryFile": "public_api.ts"
"externals": {
"@angular/cdk": "ng.cdk",
"@angular/cdk/accordion": "ng.cdk.accordion",
//...
}
}
}
私の場合、パッケージ化/ビルドエラーを回避するために、外部依存関係を追加する必要がありました。
作成public_api.ts
をプロジェクトのルートフォルダーに追加し、以下を追加します。
export * from './src/app/modules/myFeature/my-feature.module'
編集package.json
を追加し、packagr
行をscripts
タグに追加します。
"scripts": {
//...
"packagr": "ng-packagr -p ng-package.json"
}
ルートフォルダーから次のコマンドを実行して、パッケージを作成します。
npm run packagr
ローカル開発用にインストールします。
dist
フォルダーから次のコマンドを実行して、モジュールをパックします。npm pack
npm install ../some-relative-path/dist/my-component-library-0.0.0.tgz
次に、私の最終プロジェクトの他のモジュールまたはコンポーネントから自分のモジュールをインポートできます