web-dev-qa-db-ja.com

特定のフォルダーをnpmでパッケージルートとして公開する方法

ソースをビルドしてパッケージ化し、distというディレクトリにリリースするためのgulpタスクを含むプロジェクトがあります。私の目標は、npmパッケージとして公開することですが、distフォルダーのみです。 npm documentation は、filesタグを使用してエクスポートするファイルを指定できることを示しています。できます。しかし、ドキュメントには次のようにも書かれています。

配列内のフォルダーに名前を付けると、そのフォルダー内のファイルも含まれます

その結果、npmパッケージが作成され、node_modulesは次のようになります。

generated npm package

ただし、パッケージのルートにあるすべてのファイルを確認したい(distフォルダーなし)。 index.jsファイルはdistフォルダー内にありますが、ルートにある必要があります。タグfiles/dist/**/*として設定しようとしましたが、機能しませんでした。

どうすれば達成できますか?

40
robsonrosa

私は同じ願望を持っていますが、npm toolingのみを使用してこれを達成する方法はないと思います。別のスクリプト/ツールを使用してパッケージを配置できます。

代替ソリューション

現在、package.jsondistフォルダーにコピーしてから、distフォルダー内でnpm packを実行しています。これは基本的にパッケージの望ましい配置を提供すると思います。

このnpm設計に関するいくつかの関連資料を次に示します。 ノードにDirectories.libがない

Jspmはdirectories.libpackage.jsonオプションを尊重し、npmパッケージを解決するときにファイルを再配置することに注意するのも興味深いことです。私はjspmまたはnpm/webpackで使用できる共通ライブラリを構築したいので、これはすべて私のために生じました。

23
scvnc

プロジェクトにgitがある場合は、小さなハックを使用できます。次のスクリプトをpackage.jsonに追加します

    "prepublishOnly": "npm run build && cp -r ./lib/* . && rm -rf ./lib",
    "postpublish": "git clean -fd",

publishコマンドを実行すると、npmにはprepublishOnlyが関係します。ファイルをビルドし、libフォルダーに保存します(ビルドスクリプトはプロジェクトによって異なります)。次のコマンドは、ファイルをルートフォルダーにコピーし、libを削除します。 postpublishスクリプトを発行すると、プロジェクトは以前の状態に戻ります。

3
Den

特に展開にCIを使用している場合は、物を移動またはコピーする代わりに.npmignoreを使用し、公開したくないファイルをそこに追加することを強くお勧めします。

https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

例:

#tests
test
coverage

#build tools
.travis.yml
.jenkins.yml
.codeclimate.yml

#linters
.jscsrc
.jshintrc
.eslintrc*

#editor settings
.idea
.editorconfig

更新:

同じレポを使用してコードを異なるnpmパッケージに分割したい場合、最近このプロジェクトにぶつかりました: Lerna そして、見た目はとても良いです。

たぶん、あなたは見てみる必要があります

1
Thram

これは私には問題ありません。

cd TMPDIR; npm pack /path/to/package.json

TarballはTMPDIRディレクトリ内に作成します。

0

ここにもう1つのアプローチがあります。ファイルを移動したり、ビルドおよびパックスクリプトでパスを指定したりする必要がない、すべての構成に基づいています。

package.jsonメインファイルを指定します。

{
    "main": "lib/index.js",
}

いくつかの追加のTypeScriptオプション:

  • rootDirを指定します。このディレクトリにはすべてのソースコードが含まれ、indexファイル(またはpackage.jsonでメインとして使用できる他のファイル)が含まれている必要があります。
  • outDirを指定します。これは、tscコマンドがビルドする場所です

tsconfig.json

{
    "compilerOptions": {
        "rootDir": "src",
        "outDir": "lib",
    },
    ...

}
0
scottmgerstl

元のポスター(@robsonrosa)と同様の問題があります。私の場合、distディレクトリにコンパイルされるtypecriptを使用します。 TypeScriptをルートディレクトリにコンパイルすることはできますが、最善の解決策は、個別のpackage.jsonファイルはdistディレクトリにあります。
これは、@ scvncのpackage.jsonしかし、ひねりを加えたもの:

パッケージングプロセスの一環として、package.jsonベースであるがメインとは異なるパッケージの場合package.jsonルートディレクトリ内のファイル

根拠:

  • その根 package.json fileは開発ファイルです。パッケージユーザーには役に立たないスクリプトや開発依存関係が含まれている場合がありますが、セキュリティ上の懸念が生じる可能性があります。パッケージ手順には、生産からその情報を取り除くコードが含まれる場合がありますpackage.json
  • さまざまなパッケージファイルを必要とするさまざまな環境にパッケージを展開することができます(たとえば、さまざまなバージョンや依存関係が必要な場合があります)。
0
Eli Algranti