我想发布一个包含我的源代码和分发文件的 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": {
...
}
}
当您 npm publish
时,如果您没有 .npmignore
文件,npm 将使用您的 .gitignore
文件(在您的情况下,您排除了 dist
文件夹)。
要解决您的问题,请根据您的 .gitignore
文件创建一个 .npmignore
文件,不要忽略 dist 文件夹。
酸味:https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package
查看 package.json 文件 https://docs.npmjs.com/files/package.json#files 的“文件”字段
从文档中:
“文件”字段是要包含在项目中的文件数组。如果您在数组中命名一个文件夹,那么它还将包括该文件夹内的文件。 (除非它们会被另一条规则忽略。)
.gitignore
或 .npmignore
(在我阅读文档时似乎没有)-@Naresh 请告诉我们哪种方式效果很好。
如何使用脚本中的数据文件的最小示例
另一个常见用例是拥有脚本需要使用的数据文件。
这可以通过使用以下提到的技术轻松完成: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)
完整示例可在以下位置找到:
来源:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/008bd8000234d74e00845939ea6c47d302a26706/npm/data-files
发表:https://www.npmjs.com/package/cirosantilli-data-files
使用此设置,文件 mydata.txt
会在安装后放入 node_modules/cirosantilli-data-files/mydata.txt
,因为我们已将其添加到 package.json
的 files:
条目中。
然后,我们的函数 myfunc
可以通过使用 require.resolve
找到该文件并使用其内容。当然,它也只适用于可执行文件 ./cirosantilli-data-files
。
包.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"
}
我的数据.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());
如果您想要生成分布式文件的相对路径,则 is-installed-globally
软件包非常有用,具体取决于它们是本地安装还是全局安装:How to tell if npm package was installed globally or locally