2

免責事項:私はJsonixおよびJsonix Schema Compilerの作成者であり、Jsonix Schema Compilerを NPM に統合する標準的な方法を理解しようとしていpackage.jsonます。

NPM パッケージは、コード生成用のjsonix-schema-compilerJava ベースのツールを提供します。が依存関係としてインストールされている場合は、jsonix-schema-compilerXML<->JS マッピングの生成に使用できます。呼び出しは次のようなものです。

java -jar node_modules/jsonix-schema-compiler/lib/jsonix-schema-compiler-full.jar
    schema.xsd

Mappings.jsこれにより、基本的にモジュールのコードの一部であるような JavaScript ファイルが生成されます。

理想的には、jsonix-schema-compiler上記の呼び出し (java -jar ...など) は、モジュールのビルド中に実行する必要があります。ただし、モジュールの依存関係がインストールされた後に実行する必要があります(そうしないnode_modules/jsonix-schema-compilerと、失われます)。

私の質問は、NPM パッケージのどこでコード生成を標準的に構成する必要があるかということです。

今、私は次のpostinstallようなスクリプトでそれをやっています:

{
    ...
    "dependencies": {
        "jsonix": "x.x.x",
        "jsonix-schema-compiler": "x.x.x"
    },
    "devDependencies" : {
        "nodeunit" : "~0.8.6"
    },
    "scripts": {
        "postinstall" : "java -jar node_modules/jsonix-schema-compiler/lib/jsonix-schema-compiler-full.jar schema.xsd",
        "test": "nodeunit src/test/javascript/tests.js" 
    }
}

しかし、これを読んだ:

tl;dr インストールを使用しないでください。コンパイルには .gyp ファイルを使用し、それ以外には事前公開します。

preinstall または install スクリプトを明示的に設定する必要はほとんどありません。これを行っている場合は、別のオプションがあるかどうかを検討してください。

postinstallもOKなのか今迷っています。

私がやりたいのは、依存関係がインストールされた後、他のこと (テストや公開など) の前に、特定のコマンドライン コマンドを実行できるようにすることだけです。正規にどのようにすればよいですか?

4

1 に答える 1

1

通常、人々はコーヒースクリプトから JavaScript へのコンパイラー、Ecmascript 6->5 トランスパイラー、ミニファイアーなどをビルドステップとして実行しています。

発行前とインストール後の違いは、発行前のスクリプトがチェックアウトしたディレクトリで実行されるjava可能性が高いことです。インストール後スクリプトはインストールのたびに実行されますが、最小限の docker イメージのように Java (など) が利用できない場合は失敗します。そのため、ビルド ステップを prepublish または同様のスクリプトに配置する必要があります。

個人的に私がやりたいのは、package.json でスクリプト 'mypublish' を定義して、すべてのテストに合格し、ビルドを実行し、ビルド アーティファクトが存在することを確認してから実行することnpm publishです。prepublishこれは、「公開する前にビルドを行う」ではなく、「公開しようとしています」フックとして使用することを意図したものよりも直感的です。

このセットアップを使用する package.json は次のとおりです: https://github.com/reid/node-jslint/blob/master/package.jsonprepublishおよびターゲットを含む Makefile は次のとおりです: https://github.com/reid/ノード-jslint/ブロブ/マスター/Makefile

他にご不明な点がございましたら、お気軽にお問い合わせください。スクリプトを使用しない限り、それを行うための正当な方法はたくさんあるので、私はちょっととりとめのないpostinstall. ;-)

于 2014-12-27T05:38:27.487 に答える