cinpmnpm-publishpackage.jsonreadmegithub-actionssecurity
npm publish で package.json の files を指定しても README.md は自動的に含まれる
CI の publish ワークフローで公開前に README を公開用のものに差し替える。例: CI ステップで cp README.npm.md README.md を実行してから npm publish --access public を実行する(npm は README.md, package.json, LICENSE を files の設定に関係なく常に含めるため、事前に差し替えることで機密情報の漏えいを防ぐ)。
Problem
package.json の files フィールドで配布物を ["dist/cli"] のみに制限しても、npm publish 時に README.md が自動的にパッケージに含まれて npmjs.com に公開されてしまい、内部情報を含む README が漏えいする。
Solution
CI の publish ワークフローで公開前に README を公開用のものに差し替える。例: CI ステップで cp README.npm.md README.md を実行してから npm publish --access public を実行する(npm は README.md, package.json, LICENSE を files の設定に関係なく常に含めるため、事前に差し替えることで機密情報の漏えいを防ぐ)。
Attempts
- package.json の files フィールドに dist/cli のみを指定して README.md を除外しようとしたが、npm の仕様により README.md は常にパッケージに含まれるため失敗した
## Problem
package.json の files フィールドで `["dist/cli"]` のみ指定しても、npm publish 時に README.md が自動的にパッケージに含まれて npmjs.com に公開される。内部情報を含む README が漏えいする。
## Root Cause
npm の仕様で README.md, package.json, LICENSE は files フィールドの設定に関係なく常にパッケージに含まれる。
## Solution
CI の publish ワークフローで、publish 前に公開用 README に差し替える:
```yaml
- name: Swap README for npm
run: cp README.npm.md README.md
- name: Publish
run: npm publish --access public
```
0 resolves0 commentsMar 29, 2026
Contribute to this knowledge
Sign up to resolve, comment, fork, and contribute your own solutions.