元のポスター(@robsonrosa)と同様の問題があります。私の場合、dist
ディレクトリにコンパイルするtypecriptを使用します。typescriptをルートディレクトリにコンパイルすることはできますが、最善の解決策はpackage.json
、distディレクトリに別のファイルを生成することだと思います。
これは、コピーの@scvnc提案に似てpackage.json
いますが、ひねりがあります。
パッケージ化プロセスの一環として、ルートディレクトリのpackage.json
メインpackage.json
ファイルに基づいているが、それとは異なるパッケージのを生成する必要があります。
理論的根拠:
- ルート
package.json
ファイルは開発ファイルです。パッケージユーザーには役に立たないスクリプトや開発の依存関係が含まれている可能性がありますが、セキュリティ上の懸念が生じる可能性があります。パッケージング手順には、本番環境からその情報を取り除くコードが含まれている場合がありますpackage.json
。
- 異なるパッケージファイルを必要とする可能性のある異なる環境にパッケージをデプロイしたい場合があります(たとえば、異なるバージョンまたは依存関係が必要な場合があります)。
---編集---
コメントで解決策を求められました。これが私が使っているコードです。これは例として考えるべきであり、一般的なものではなく、私のプロジェクトに固有のものです。
私のセットアップ:
package.json - main package.json with dev dependencies and useful scripts.
.npmignore - files to ignore; copied to 'dist' directory as part of the setup.
/src - directory where my typescript code resides.
/src/SetupPackage.ts - bit of code used to setup the package.
/dist - destination directory for the compiled javascript files.
dist
ディレクトリのみをパッケージ化したいので、ディレクトリはパッケージ内のルートディレクトリである必要があります。
SetupPackage.ts
私のsrc
ディレクトリ内のファイルは、typescriptによってディレクトリSetupPackage.js
内にコンパイルされますdist
。
import fs from "fs";
// DO NOT DELETE THIS FILE
// This file is used by build system to build a clean npm package with the compiled js files in the root of the package.
// It will not be included in the npm package.
function main() {
const source = fs.readFileSync(__dirname + "/../package.json").toString('utf-8');
const sourceObj = JSON.parse(source);
sourceObj.scripts = {};
sourceObj.devDependencies = {};
if (sourceObj.main.startsWith("dist/")) {
sourceObj.main = sourceObj.main.slice(5);
}
fs.writeFileSync(__dirname + "/package.json", Buffer.from(JSON.stringify(sourceObj, null, 2), "utf-8") );
fs.writeFileSync(__dirname + "/version.txt", Buffer.from(sourceObj.version, "utf-8") );
fs.copyFileSync(__dirname + "/../.npmignore", __dirname + "/.npmignore");
}
main();
このファイル:
- ルートをコピーし
package.json
ますが、パッケージで不要なスクリプトと開発者の依存関係を削除します。また、パッケージへのメインエントリポイントを修正します。
- パッケージのバージョンを
package.json
からというファイルに書き込みますversion.txt
。
.npmignore
ルートからパッケージをコピーします。
.npmignoreの内容は次のとおりです。
*.map
*.spec.*
SetupPackage.*
version.txt
つまり、ユニットテスト(スペックファイル)とtypescriptマップファイルは、SetupPackage.js
ファイルとversion.txt
それが作成するファイルと同様に無視されます。これにより、きれいなパッケージが残ります。
最後に、メインpackage.json
ファイルには、ビルドシステムで使用するための次のスクリプトがあります(sh
シェルとして使用されることを前提としています)。
"scripts": {
"compile": "tsc",
"clean": "rm -rf dist",
"prebuildpackage": "npm run clean && npm run compile && node dist/SetupPackage.js",
"buildpackage": "cd dist && npm pack"
},
パッケージをビルドするために、ビルドシステムはリポジトリのクローンを作成し、npm install
実行してから実行npm run buildpackage
します。
dist
ディレクトリを削除して、クリーンなコンパイルを保証します。
- typescriptコードをjavascriptにコンパイルします。
- パッケージングの
SetupPackage.js
準備dist
をするファイルを実行します。
dist
ディレクトリにcdし、そこでパッケージをビルドします。
version.txt
package.jsonのバージョンを取得し、リポジトリにタグを付ける簡単な方法としてファイルを使用します。これを行う方法は他にも無数にあります。または、バージョンを自動インクリメントすることもできます。これを削除SetupPackage.ts
し、.npmignore
それはあなたにとって有用ではない場合。