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

我想发布一个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": {
...
}
}
144481 次浏览

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

为了解决你的问题,根据你的.gitignore文件不忽略dist文件夹创建一个.npmignore文件。

来源:将文件排除在您的包之外 .

看看“文件”;包装字段。json文件: 包中。json文件 < / em >

从文档中可以看到:

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

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

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

这可以通过使用我怎么能得到一个模块的路径,我已经加载通过要求是*不是*我的(即在一些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;

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的内容。