Node.js 如何发布包含分发文件的npm包?

Node.js 如何发布包含分发文件的npm包?,node.js,git,github,npm,Node.js,Git,Github,Npm,我想发布一个包含我的源文件和分发文件的npm包。我的Github存储库包含src文件夹,其中包含JavaScript源文件。生成过程生成包含分发文件的dist文件夹。当然,dist文件夹不会签入Github存储库 我如何发布一个npm包,当有人安装npm时,他们会得到src以及dist文件夹?当前,当我从git存储库运行npm publish时,只会发布src文件夹 My package.json如下所示: { "name": "join-js", "version": "0.0.1",

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

我如何发布一个npm包,当有人安装
npm
时,他们会得到
src
以及
dist
文件夹?当前,当我从git存储库运行
npm publish
时,只会发布
src
文件夹

My 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": {
    ...
  }
}

当您发布
npm
时,如果您没有
.npmignore
文件,npm将使用您的
.gitignore
文件(在您的情况下,您排除了
dist
文件夹)

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

来源:

查看package.json文件的“files”字段

从文件中:

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


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

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

这可以通过使用以下所述的技术轻松完成:

完整示例可在以下网址找到:

  • 资料来源:
  • 出版:
通过此设置,文件
mydata.txt
在安装后被放入
node_modules/cirosantilli data files/mydata.txt
,因为我们将其添加到
文件中:
进入
package.json

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

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数据文件

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

如果您想根据分布式文件是本地安装还是全局安装来生成分布式文件的相对路径,那么
是全局安装的
包很有用:

我很想知道“files”字段是否覆盖
.gitignore
.npmignore
(我读文档时似乎没有覆盖)-@Naresh请告诉我们哪种方法很好。“文件”确实被忽略了。gitignore。我的.gitignore中有“dist”,但包含在“files”中,该文件夹正在发布到npm。“文件”似乎是一些流行的软件包,如expess和bluebird的发布方式(同时还有其他使用.npmignore方法的软件包)。现在,我将使用“文件”,因为它似乎是一种更直接的表达发布内容的方式。但感谢你们两位今天让我对npm的了解至少增加了两倍!值得注意的是,如果指定了“文件”,那么只有这些文件才是项目中包含的唯一文件(不能排除的文件除外,如package.json等)。感谢您的快速响应。你的回答当然是正确的,但现在我将采用尤金建议的“文件”方法,因为在我看来这更直接。请看我在他的回答下面的详细评论。