7

Javascript ライブラリの Angular ラッパーをビルドしようとしていますが、「モジュールが見つかりません」というエラーが発生します。Javascript ライブラリは開発中で、まだ NPM に公開されていないため、問題を引き起こしている可能性がある npm-link を使用していますが、よくわかりません。私のAngularバージョンは8.2.2です。

Javascript ソース ライブラリ

ソースライブラリ/index.js:

var sourcelib = (function () {
    var doSomething = function() {
    };
    return {
        doSomething: doSomething
    };
})();
export default sourcelib;

sourcelibディレクトリには、 package.jsonファイルとREADME.mdファイルも含まれています。期待どおりに npm-link が作成されます。

cd sourcelib
npm link

Angular ラッパー

以下は、Angular ワークスペース、ライブラリ、およびテスト アプリケーションを作成するために実行している Angular CLI コマンドです。

ng new app-test --create-application=false
cd app-test
ng generate library testlib
ng generate application testlib-app

次に、 testlibを Javascript ライブラリにリンクします。

cd projects/testlib
npm link sourcelib

testlib内にモジュールとコンポーネントを生成します。

cd src/lib
ng generate module test
ng generate component test/testcomp

testcomp.component.ts :

import { Component, OnInit } from '@angular/core';
import sourcelib from 'sourcelib';

@Component({
    selector: 'testcomp',
    template: '<div></div>'
})
export class TestcompComponent implements OnInit {
    constructor() { }

    ngOnInit() {
        sourcelib.doSomething();
    }
}

public-api.ts :

export * from './lib/test/test.module';
export * from './lib/test/testcomp/testcomp.component';

次にsourcelibをビルドします。

ng build

コンソール出力は次のとおりです。

Building Angular Package

------------------------------------------------------------------------------
Building entry point 'testlib'
------------------------------------------------------------------------------
Compiling TypeScript sources through ngc
Bundling to FESM2015
Bundling to FESM5
Bundling to UMD
WARNING: No name was provided for external module 'sourcelib' in output.globals – guessing 'sourcelib'
Minifying UMD bundle
Copying declaration files
Writing package metadata
Built testlib

------------------------------------------------------------------------------
Built Angular Package!
 - from: /Users/.../app-test/projects/testlib
 - to:   /Users/.../app-test/dist/testlib
------------------------------------------------------------------------------

そして、 sourcelibへの npm-link を作成します:

cd ../../dist/testlib
npm link

Angular テスト アプリ

testlib-apptestlibにリンクします。

cd ../../projects/testlib-app
npm link testlib

app.module.ts :

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { TestcompComponent } from 'testlib';

@NgModule({
    declarations: [
        AppComponent, TestcompComponent
    ],
    imports: [
        BrowserModule
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

app.component.ts :

import { Component } from '@angular/core';
import { TestcompComponent } from 'testlib';

@Component({
    selector: 'app-root',
    template: '<testcomp></testcomp>'
})
export class AppComponent {
}

アプリを提供します。

ng serve

結果

ERROR in /Users/.../app-test/dist/testlib/fesm2015/testlib.js
Module not found: Error: Can't resolve 'sourcelib' in '/Users/.../app-test/dist/testlib/fesm2015'
ℹ 「wdm」: Failed to compile.

これのトラブルシューティングに多くの時間を費やしましたが、解決策を見つけることができませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

0

取得したいパッケージのmainパラメータを確認してください。そのようなパラメーターが存在しないフォルダーをターゲットにしている場合、インポートは失敗しますpackage.jsonnpm link

于 2020-01-28T17:22:09.773 に答える