如何发布包含分发文件的NPM包?

6ojccjat  于 2022-09-21  发布在  Git
关注(0)|答案(4)|浏览(160)

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

我如何发布NPM包,使他们在执行npm install时,获得srcdist文件夹?目前,当我从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": {
    ...
  }
}
ds97pgxw

ds97pgxw1#

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

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

来源:将文件放在您的包之外

wnavrhmk

wnavrhmk2#

查看Package.json文件的“Files”字段:Package.json,Files

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

ddhy6vgd

ddhy6vgd3#

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

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

这可以通过使用在*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,因为我们将其添加到package.jsonfiles:条目中。

然后,我们的函数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;

密码-数据-文件


# !/usr/bin/env node

const cirosantilli_data_files = require('cirosantilli-data-files');
console.log(cirosantilli_data_files.myfunc());

如果您希望生成分发文件的相对路径,则is-installed-globally包将非常有用,具体取决于这些文件是本地安装还是全局安装:如何判断NPM包是全局安装的还是本地安装的

kqlmhetl

kqlmhetl4#

只要不在.npmIgnore文件中提到src和dist,就可以在node_模块中获取scr和dist……就这样

另一点是,如果存在.gitignore文件,并且缺少.npmIgnore,则将使用.gitignore的内容。

相关问题