如何使用分发文件发布npm包?

时间:2015-07-26 22:14:11

标签: node.js git github npm

我想发布一个包含我的源代码和分发文件的npm包。我的Github存储库包含src文件夹,其中包含JavaScript源文件。构建过程生成包含分发文件的dist文件夹。当然,dist文件夹不会被检入Github存储库。

如何以某人npm install获取src以及dist文件夹的方式发布npm包?目前,当我从我的git存储库运行npm publish时,它只会导致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": {
    ...
  }
}

3 个答案:

答案 0 :(得分:127)

当你npm publish时,如果你没有.npmignore文件,npm将使用你的.gitignore文件(如果你排除了dist文件夹)。

要解决您的问题,请根据您的.npmignore文件创建.gitignore文件,而不要忽略dist文件夹

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

答案 1 :(得分:74)

看看"文件" package.json文件的字段 https://docs.npmjs.com/files/package.json#files

来自文档:

  

"文件" field是要包含在项目中的文件数组。如果您在数组中命名文件夹,那么它还将包含该文件夹中的文件。 (除非他们会被另一条规则忽略。)

答案 2 :(得分:1)

如何使用脚本中的数据文件的最小示例

另一个常见的用例是拥有脚本需要使用的数据文件。

使用In node.JS how can I get the path of a module I have loaded via require that is *not* mine (i.e. in some node_module)

中提到的技术可以轻松完成此操作

完整的示例可以在以下位置找到:

使用此设置,文件mydata.txt会在安装后放入node_modules/cirosantilli-data-files/mydata.txt,因为我们已将其添加到files:的{​​{1}}条目中。

我们的函数package.json然后可以通过使用myfunc查找该文件并使用其内容。当然,它也只适用于可执行文件require.resolve

package.json

./cirosantilli-data-files

mydata.txt

{
  "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"
}

index.js

hello world

cirosantilli-数据文件

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;