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

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

我的包。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": {
    ...
  }
}

当前回答

看一下package的“files”字段。json文件: 包中。json文件

从文档中可以看到:

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

其他回答

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

为了解决这个问题,在.gitignore文件的基础上创建一个.npmignore文件,不要忽略dist文件夹。

来源:让文件远离你的包

看一下package的“files”字段。json文件: 包中。json文件

从文档中可以看到:

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

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

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

这可以通过使用文中提到的技术轻松完成:我如何通过require获得我已经加载的模块的路径,而它不是我的(即在一些node_module中)

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

来源:cirosantilli / linux-kernel-module-cheat / npm /数据文件 发表:cirosantilli-data-files

通过这样的设置,文件mydata.txt在安装后被放入node_modules/cirosantilli-data-files/mydata.txt,因为我们将它添加到我们的文件:package.json的条目。

然后,函数myfunc可以通过require.resolve找到该文件并使用其内容。当然,它也只适用于可执行文件。/ cirrosantilli -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包就很有用了

只是不要在.npmignore文件中提到SRC和dist来获得SCR和node_modules中的dist…就是这样

另一点是,如果存在一个.gitignore文件,而.npmignore缺失,则会使用.gitignore的内容。