Original bug ticket: [https://npm.community/t/831](https://npm.community/t/831)
Originally filed: 2018-07-23T20:19:41.160Z
我在 npm 6.13.0 中遇到了这个问题。 pack
将包含被.gitignore
和/或.npmignore
忽略的文件(如果在files
列出)。 当这些文件位于希望包含该目录中其他文件的目录中时,这一点最为明显。
一种似乎对我有用的解决方法是将"!.DS_Store"
添加files
数组中的最后一个条目(顺序似乎很重要)。
我想我在 npm 6.12.1 之后看到了类似的东西:我的.gitignore
指定排除npm-shrinkwrap.json
和/build/
目录。 package.json
确实在files
部分中明确列出了build
目录。 作为构建过程的一部分,我在模块根目录中生成一个npm-shrinkwrap.json
,然后将其复制到build
目录中。
使用 npm 6.4.1, ~6.7, ~6.9, ~6.10, ~6.11 和 6.12.0 打包文件(来自npm pack
)仅包含build/npm-shrinkwrap.json
,但使用 6.12.1 及更高版本包括build/npm-shrinkwrap.json
_and_ npm-shrinkwrap.json
。
(社区现在关闭/只读,如果这不是同一个问题,我想道歉!)
在已发布包的任何部分中包含shrinkwrap 文件对我来说似乎很奇怪,但无论如何它只会在根中产生影响 - 为什么您的构建过程会在那里放一个副本?
这当然是个好问题。
我将它放在 build/ 目录中,作为另一个构建步骤的一部分,该步骤采用 build/ 目录并创建一个 docker 容器映像。 这个想法是在 docker 外运行一次npm test
等,然后让shrinkwrap 文件加速 docker 进程(通过让 docker 内的npm install
拾取完全相同的文件)。 然后,这也将作为有关用于构建的文件的文档。 该过程只是将 npm-shrinkwrap.json 复制到构建目录中。
现在对我来说修复是使用mv
而不是cp
将文件放入build/
目录。
编辑:Fix/Work-around 对我有用,但我有点担心由于注册表上的行为包的这种变化可能会无意中包含他们不应该包含的文件——我偶然发现了这一点,因为另一部分我的系统检查npm-shrinkwrap.json
文件的存在。
最有用的评论
我在 npm 6.13.0 中遇到了这个问题。
pack
将包含被.gitignore
和/或.npmignore
忽略的文件(如果在files
列出)。 当这些文件位于希望包含该目录中其他文件的目录中时,这一点最为明显。一种似乎对我有用的解决方法是将
"!.DS_Store"
添加files
数组中的最后一个条目(顺序似乎很重要)。