ソースをビルドしてパッケージ化し、dist
というディレクトリにリリースするためのgulpタスクを含むプロジェクトがあります。私の目標は、npmパッケージとして公開することですが、distフォルダーのみです。 npm documentation は、files
タグを使用してエクスポートするファイルを指定できることを示しています。できます。しかし、ドキュメントには次のようにも書かれています。
配列内のフォルダーに名前を付けると、そのフォルダー内のファイルも含まれます
その結果、npmパッケージが作成され、node_modulesは次のようになります。
ただし、パッケージのルートにあるすべてのファイルを確認したい(dist
フォルダーなし)。 index.js
ファイルはdist
フォルダー内にありますが、ルートにある必要があります。タグfiles
を/dist/**/*
として設定しようとしましたが、機能しませんでした。
どうすれば達成できますか?
私は同じ願望を持っていますが、npm toolingのみを使用してこれを達成する方法はないと思います。別のスクリプト/ツールを使用してパッケージを配置できます。
現在、package.json
をdist
フォルダーにコピーしてから、dist
フォルダー内でnpm pack
を実行しています。これは基本的にパッケージの望ましい配置を提供すると思います。
このnpm設計に関するいくつかの関連資料を次に示します。 ノードにDirectories.libがない 。
Jspmはdirectories.lib
のpackage.json
オプションを尊重し、npmパッケージを解決するときにファイルを再配置することに注意するのも興味深いことです。私はjspmまたはnpm/webpackで使用できる共通ライブラリを構築したいので、これはすべて私のために生じました。
プロジェクトにgitがある場合は、小さなハックを使用できます。次のスクリプトをpackage.jsonに追加します
"prepublishOnly": "npm run build && cp -r ./lib/* . && rm -rf ./lib",
"postpublish": "git clean -fd",
publish
コマンドを実行すると、npmにはprepublishOnly
が関係します。ファイルをビルドし、lib
フォルダーに保存します(ビルドスクリプトはプロジェクトによって異なります)。次のコマンドは、ファイルをルートフォルダーにコピーし、lib
を削除します。 postpublish
スクリプトを発行すると、プロジェクトは以前の状態に戻ります。
特に展開に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 そして、見た目はとても良いです。
たぶん、あなたは見てみる必要があります
これは私には問題ありません。
cd TMPDIR; npm pack
/path/to/package.json
TarballはTMPDIRディレクトリ内に作成します。
ここにもう1つのアプローチがあります。ファイルを移動したり、ビルドおよびパックスクリプトでパスを指定したりする必要がない、すべての構成に基づいています。
package.json
メインファイルを指定します。
{
"main": "lib/index.js",
}
いくつかの追加のTypeScriptオプション:
rootDir
を指定します。このディレクトリにはすべてのソースコードが含まれ、index
ファイル(またはpackage.json
でメインとして使用できる他のファイル)が含まれている必要があります。outDir
を指定します。これは、tscコマンドがビルドする場所ですtsconfig.json
{
"compilerOptions": {
"rootDir": "src",
"outDir": "lib",
},
...
}
元のポスター(@robsonrosa)と同様の問題があります。私の場合、dist
ディレクトリにコンパイルされるtypecriptを使用します。 TypeScriptをルートディレクトリにコンパイルすることはできますが、最善の解決策は、個別のpackage.json
ファイルはdistディレクトリにあります。
これは、@ scvncのpackage.json
しかし、ひねりを加えたもの:
パッケージングプロセスの一環として、package.json
ベースであるがメインとは異なるパッケージの場合package.json
ルートディレクトリ内のファイル
根拠:
package.json
fileは開発ファイルです。パッケージユーザーには役に立たないスクリプトや開発依存関係が含まれている場合がありますが、セキュリティ上の懸念が生じる可能性があります。パッケージ手順には、生産からその情報を取り除くコードが含まれる場合がありますpackage.json
。