你如何使用package.json中的'files'和'目录'属性?

Baz*_*Baz 58 npm package.json

如果a package.jsonfiles道具和/或directories道具:

  "files": [
    "./src/assets/fonts/"
  ],
  "directories": {
     "assets:": "./src/assets"
  }
Run Code Online (Sandbox Code Playgroud)

有哪些方法可以利用它们?文档没有提到一旦指定它们可以用它们做什么.

例如,文件文档说:

"files"字段是要包含在项目中的文件数组.如果您在数组中命名文件夹,那么它还将包含该文件夹中的文件.

"包含在您的项目中"是什么意思?包括在哪里?他们现在不是以前可以获得的?

目录部分,文档说:

将来,此信息可能会以其他创造性方式使用.

它现有的创作方式有哪些?

jas*_*rns 76

"包含在您的项目中"意味着文件将位于运行时创建的打包的tarball中npm publish.您还可以运行npm pack以生成tarball以进行检查,而无需实际触发发布.这样您就可以实际打开生成的tarball并检查哪些文件不包含在内.

虽然.npmignore(或.gitignore作为代理,如果没有.npmignore)用作要忽略的文件的黑名单(因此默认包括其他所有内容),该files数组是白名单.也就是说,默认情况下不包括所有内容,如果files指定了数组,则默认情况下会排除所有内容,并且只有明确列出的文件才会包含在打包的tarball中.

例如,假设您的包是一个供浏览器使用的库.你的代码在lib/,你运行browserify编译成浏览器兼容的lib at dist/index.js.你可以从列出的一堆文件开始.gitignore,它们被用作.npmignore不存在的事实.但是现在dist/已经充满了生成的文件,你希望它们从git repo中被忽略.如果你添加它们.gitignore,它们将从git repo中排除,但它们也将从包tarball中被忽略.所以,你有两个选择:复制你.gitignore.npmignore,但只列出dist/.gitignore.如果你这样做,你将不得不保持两个文件几乎 - 但不是完全同步.这种方式很容易出错并容易出错.

另一种方法是没有a .npmignore,而只是列出files数组中实际需要的文件.README.*,package.json,CHANGELOG.*(也许一对夫妇等)会自动包含在压缩包而不管.所以你只需添加即可"files": [ "dist" ].现在你的包tarball将不包括原始源JS lib,也不包括tests/等,而是只包含实际编译的lib dist/.

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

"scripts": {
  "clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
  "lint": "eslint $npm_package_directories_src",
  "test": "teenytest $npm_package_directories_test",
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,目录只被指定一次,如果它们发生变化,它们只需要在一个位置(而不是整个package.json中的许多位置)进行更改.

  • 您现在还可以执行“npmpublish--dry-run”来准确找出包含哪些文件,而无需执行实际的发布步骤 (4认同)