配布ファイルを含むnpmパッケージを公開する方法は?


125

ソースと配布ファイルを含むnpmパッケージを公開したいと思います。私のGithubリポジトリにはsrcは、JavaScriptソースファイルをフォルダーが含まれています。ビルドプロセスdistにより、配布ファイルを含むフォルダーが生成されます。もちろん、distフォルダーはGithubリポジトリにチェックインされません。

誰かがnpm installを取得srcしたときに、distフォルダーと同様に取得するように、npmパッケージを公開するにはどうすればよいですか?現在私が走るときnpm publish、gitリポジトリからすると、srcフォルダーのみが公開されます。

私のpackage.jsonは次のようになります:

{
  "name": "join-js",
  "version": "0.0.1",
  "homepage": "https://github.com/archfirst/joinjs",
  "repository": {
    "type": "git",
    "url": "https://github.com/archfirst/joinjs.git"
  },
  "main": "dist/index.js",
  "scripts": {
    "test": "gulp",
    "build": "gulp build",
    "prepublish": "npm run build"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  }
}

回答:


101

package.jsonファイルの「files」フィールドを ご覧くださいhttps://docs.npmjs.com/files/package.json#files

ドキュメントから:

「files」フィールドは、プロジェクトに含めるファイルの配列です。配列内のフォルダーに名前を付けると、そのフォルダー内のファイルも含まれます。(別のルールで無視される場合を除きます。)


3
「ファイル」フィールドの上書き場合、私は知って興味.gitignoreかは.npmignore@Naresh罰金を働いた方法を教えてください- (それは私がドキュメントを読んでないようにそれはそう)。
topheman 2015

8
「ファイル」は確かに.gitignoreを無視しています。.gitignoreに「dist」がありますが、「files」に含まれており、フォルダーはnpmに公開されています。「ファイル」は、expessやbluebirdなどのいくつかの人気のあるパッケージが公開しているようです(.npmignoreメソッドを使用する他のパッケージもあります)。今のところ、「ファイル」を使用します。これは、何を公開するかをより直接的に示す方法のように思われるためです。しかし、npmに関する私の知識を少なくとも今日は2倍に増やしてくれた両方の皆さんに感謝します!
Naresh、2015

3
「ファイル」が指定されている場合は、それらのファイルのみがプロジェクトに含まれる唯一のファイルでます(package.jsonなどの除外できないファイルを除く)
bmacnaughton

176

とき、あなたはnpm publishあなたが持っていない場合は、.npmignoreファイルを、NPMは、あなたの使用します.gitignore(お使いの場合には、あなたが除外されたファイルをdistフォルダ)。

あなたの問題を解決するために、作成.npmignoreあなたに基づいてファイル.gitignore、ファイルをdistのフォルダを無視せずに

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


3
迅速な対応に感謝します。あなたの応答は確かに正しいですが、今のところ、私はより直接的に思われるので、Eugeneによって提案された「ファイル」アプローチを使用します。彼の返答の下で私の詳細なコメントを見てください。
Naresh、2015

3
どうもありがとうございます!
corvid

0

スクリプトからのデータファイルの使用方法の最小限の例

もう1つの一般的な使用例は、スクリプトで使用する必要があるデータファイルを用意することです。

これは、次の場所に記載されている手法を使用して簡単に行うことができます。node.JSでrequireを介してロードしたモジュールのパスを取得するにはどうすればよいですか。

完全な例は、次の場所にあります。

この設定では、ファイルをのエントリに追加したため、インストール後にファイルmydata.txtが配置さnode_modules/cirosantilli-data-files/mydata.txtれます。files:package.json

myfunc次に、関数はそのファイルを見つけ、その内容をを使用して使用できrequire.resolveます。./cirosantilli-data-filesもちろん、実行可能ファイルに対しても機能します。

package.json

{
  "bin": {
    "cirosantilli-data-files": "cirosantilli-data-files"
  },
  "license": "MIT",
  "files":  [
    "cirosantilli-data-files",
    "mydata.txt",
    "index.js"
  ],
  "name": "cirosantilli-data-files",
  "repository": "cirosantilli/linux-kernel-module-cheat",
  "version": "0.1.0"
}

mydata.txt

hello world

index.js

const fs = require('fs');
const path = require('path');

function myfunc() {
  const package_path = path.dirname(require.resolve(
    path.join('cirosantilli-data-files', 'package.json')));
  return fs.readFileSync(path.join(package_path, 'mydata.txt'), 'utf-8');
}
exports.myfunc = myfunc;

cirosantilli-data-files

#!/usr/bin/env node
const cirosantilli_data_files = require('cirosantilli-data-files');
console.log(cirosantilli_data_files.myfunc());

is-installed-globallyパッケージには、あなたは彼らがローカルまたはグローバルにインストールされている場合によっては配布されたファイルへの相対パスを生成する場合は、その後に便利です:NPMパッケージは、グローバルまたはローカルにインストールされた場合、どのよう指示します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.