Npm 如何使用';文件';和';目录';package.json中的属性?

Npm 如何使用';文件';和';目录';package.json中的属性?,npm,package.json,Npm,Package.json,如果package.json具有文件属性和/或目录属性: "files": [ "./src/assets/fonts/" ], "directories": { "assets:": "./src/assets" } 有哪些方法可以利用它们?文档中没有提到一旦指定了它们,可以用它们做什么 例如,政府说: “文件”字段是要包含在项目中的文件数组。如果在数组中命名一个文件夹,那么它还将包含该文件夹中的文件 “包含在项目中”是什么意思?包括在哪里?既然他们以前不在

如果
package.json
具有
文件
属性和/或
目录
属性:

  "files": [
    "./src/assets/fonts/"
  ],
  "directories": {
     "assets:": "./src/assets"
  }
有哪些方法可以利用它们?文档中没有提到一旦指定了它们,可以用它们做什么

例如,政府说:

“文件”字段是要包含在项目中的文件数组。如果在数组中命名一个文件夹,那么它还将包含该文件夹中的文件

“包含在项目中”是什么意思?包括在哪里?既然他们以前不在,现在怎么能接受呢

在报告中,文件说:

将来,这些信息可能会以其他创造性的方式使用

使用它的现有创造性方式是什么?

“包含在项目中”意味着文件将在运行
npm publish
时创建的打包tarball中。您还可以运行
npm-pack
生成tarball以供检查,而无需实际触发发布。通过这种方式,您可以实际打开生成的tarball并检查哪些文件被/未被包含

.npmignore
(或
.gitignore
作为代理时,如果没有
.npmignore
)充当要忽略的文件的黑名单(因此默认情况下包括所有其他文件),
文件
数组是白名单。也就是说,如果指定了
files
array,则默认情况下不包括所有内容,而只包括显式列出的那些文件

例如,假设您的包是一个用于在浏览器中使用的库。您的代码位于
lib/
中,您可以在
dist/index.js
处运行browserify编译成与浏览器兼容的lib。您首先在
.gitignore
中列出一组文件,这些文件用作不存在的事实
.npmignore
。但是现在
dist/
充满了生成的文件,您希望从git repo中忽略它们。如果将它们添加到
.gitignore
,它们将被排除在git回购之外,但它们也将被从包tarball中忽略。因此,您有两个选择:将
.gitignore
复制为
.npmignore
,但只在
.gitignore
中列出
dist/
。如果您这样做,您将不得不保持两个文件几乎但不完全同步。这种方法是tedius的,并且容易出错

另一种选择是不使用
.npmignore
,而是在
文件
数组中列出您实际需要的文件<代码>自述文件。*,
包.json
变更日志。*
(可能还有一些其他的)都会自动包含在tarball中。因此,您只需添加
“文件”:[“dist”]
,就完成了。现在,您的包tarball将不包括来自
lib
的原始源JS,也不包括
tests/
等,而是只包含
dist/
中实际编译的lib

至于
目录
,我通常会列出
lib
(对于es5)、
src
(对于es6、coffeescript、typescript等源)、
dist
(对于浏览器或vm特定构建)、
测试
输出
(对于覆盖率报告等临时生成的文件),
doc
,尽管npm或其他工具不直接使用此属性,但它使目录结构显式。此外,它还可以在npm脚本中引用目录,如下所示:

“脚本”:{
“清理”:“rm-rf$npm\U包目录\U区$npm\U包目录\U输出”,
“lint”:“eslint$npm\u包\u目录\u src”,
“测试”:“teenytest$npm\u包\u目录\u测试”,
}

这样,目录只指定一次,如果目录发生更改,则只需在单个位置(而不是整个package.json中的多个位置)进行更改。

for me文件显示在tarball内容中,但在node mosules文件夹中不可用。你知道会有什么问题吗?你现在也可以做
npm publish--dry run
来找出到底包含了哪些文件,而无需执行实际的发布步骤。不幸的是,在JavaScript世界中,像“文件模式遵循与.gitignore类似的语法,但相反”这样的东西就是你将要得到的所有文档。我想知道这有多相似?您通常希望找到一个语法,或者至少参考一些关于如何解释该值的其他规范。