5

PrimeNg と呼ばれる Angular2 用の非常に優れたウィジェット ライブラリを使用しています。

PrimeNg に必要な機能がいくつか欠けているとします。そのため、リポジトリをフォークし、 プル リクエストを送信して変更内容をメイン リポジトリに取得します。プル リクエストが受け入れられるのを待っている間、リポジトリのフォークを package.json に含めたいと思います。

これからpackage.jsonを更新してみました:

"dependencies": {
    ...
    "primeng": "1.0.0-beta.13",
    ...
}

これに:

"dependencies": {
    ...
    "primeng": "JakeSummers/primeng.git#d35f5635a216005018bed89d249816e0f65f68f6",
    ...
}

残念ながら、これは機能しません。

node_modules ディレクトリを見ると、基本的に空であることがわかります。

[Aug-30 18:04][node_modules]$ tree primeng/
primeng/
├── LICENSE.md
├── package.json
└── README.md

0 directories, 3 files

package.json を変更する前は、ディレクトリには次のものが含まれていました。

primeng/
├── components
│   ├── accordion
│   │   ├── accordion.d.ts
│   │   ├── accordion.js
│   │   └── accordion.js.map
│   ├── autocomplete
│   │   ├── autocomplete.d.ts
│   │   ├── autocomplete.js
│   │   └── autocomplete.js.map
│   ├── breadcrumb
│   │   ├── breadcrumb.d.ts
│   │   ├── breadcrumb.js
│   │   └── breadcrumb.js.map
│   ├── button
│   │   ├── button.d.ts
│   │   ├── button.js
│   │   └── button.js.map
│   ├── calendar
│   │   ├── calendar.d.ts
...
├── LICENSE.md
├── package.json
├── primeng.d.ts
├── primeng.js
├── primeng.js.map
├── prod
│   ├── application.js
│   ├── polyfills.js
│   └── vendor.js
└── README.md

62 directories, 195 files

package.json docsをさらに見てみると、多分私はやっていないようです

CoffeeScript やその他の言語を JavaScript にコンパイルするなど、プラットフォーム固有ではないビルド手順については、prepublish スクリプトを使用してこれを行い、必要なパッケージを devDependency にします。

例えば:

{ "name": "ethopia-waza",
      "description": "a delightfully fruity coffee varietal",
      "version": "1.2.3",
      "devDependencies": {
        "coffee-script": "~1.6.3"
      },
      "scripts": {
        "prepublish": "coffee -o lib/ -c src/waza.coffee"
      },
      "main": "lib/waza.js"
}

prepublish スクリプトは公開前に実行されるため、ユーザーは自分でコンパイルしなくても機能を使用できます。開発モード (つまり、ローカルで npm install を実行) では、このスクリプトも実行されるため、簡単にテストできます。

primeNg プロジェクトの package.json には prepublish スクリプトがありません。追加する必要があるかどうかを検討しています。必要な場合はどうすればよいですか? そのスクリプトはいつ実行されますか? git リポジトリからのプルで実行されますか?

ポインタや例をいただければ幸いです。ありがとう!

この質問を PrimeNg git リポジトリにクロスポストしました。

4

2 に答える 2

4

問題は、Typescript にソース コードがあることですが、npm パッケージ内で JS をコンパイルする必要があります。不運にも:

  • .npmignoreファイルはすべての typescript ソースを除外します。
  • typescript コンパイラは にあります。devDependenciesつまり、 で引っ張られませんnpm install --production
  • noprepublishまたはpostinstallスクリプトを自動的にコンパイルします。

これらの点から、解決策が何であるかがわかります。いくつかのアイデア:

  1. .js結果のファイルをコンパイルして git リポジトリにチェックインします。
  2. npm publishwith prepublishscriptの一部としてコンパイルします。
  3. の一部としてコンパイルnpm install:
    • .tsからファイルを削除します.npmignore
    • からすべてを引き込みdevDependenciesますdependencies
    • スクリプトを追加postinstallします。

最初のオプションは実装が最も簡単ですが、最もエラーが発生しやすいものでもあります。コミットする前に実行中のコンパイル手順を忘れがちなので、おそらくそれを git フックに追加することをお勧めします。しかし、その時点で、2 番目または 3 番目を使用する方が適切です。

2 番目のものを選択し、独自のフォークを使用することに決めた場合はprepublish、パッケージのインストール時にスクリプトが実行されることを確認してください。


Githubからインストールする場合*

npm installあなたが言及したのは正しいようですが、私はより明示的な形式を提唱します:

// The thing that actually gets saved into `package.json`:
github:${username}/${repository}#${optional-id}

// So the command would be:
npm install github:JakeSummers/primeng#d35f5635a216005018bed89d249816e0f65f68f6

* 独自のレジストリnpmと github以外の場所からのインストールもサポートしています。興味がある場合は、ここで「パッケージ」とは何かを参照してください

于 2016-09-18T13:09:39.093 に答える
-2

最も簡単な方法は、マスターで必要なコードを作成し、package.json にプレーンな古いものとしてリストすることJakeSummer/primengです。

パブリッシュを再実行する必要がある場合は、コードをプッシュする前に実行します。たとえば、npm run prepublish. すべてのパッケージがそれを必要とするわけではないので、それがない場合でもそうであると想定しないでください。

于 2016-08-31T00:00:43.263 に答える