`npm publish`忽略对.npmignore的新添加
在app附近构建`npm publish`忽略对.npmignore的新添加,npm,npm-publish,npmignore,npm-pack,Npm,Npm Publish,Npmignore,Npm Pack,在app附近构建create时,会在项目树中创建工件。其中一些文件被保存到.npmignore文件中,但其他文件被丢失,直到我尝试发布新版本,并注意到由于生锈的构建工件,npm包将有数百兆字节大(!!)。我将这些信息发送给了.npmignore,但是npm publish没有注意到 我可以通过删除文件来解决这个问题,但是对于一个开放源代码库来说,这样的解决方法很容易出错,而这个库可能是由不断增长的贡献者团队维护和发布的 npm是否将.npmignore文件缓存在某个地方?如何使npm使用新设置
create
时,会在项目树中创建工件。其中一些文件被保存到.npmignore
文件中,但其他文件被丢失,直到我尝试发布新版本,并注意到由于生锈的构建工件,npm包将有数百兆字节大(!!)。我将这些信息发送给了.npmignore
,但是npm publish
没有注意到
我可以通过删除文件来解决这个问题,但是对于一个开放源代码库来说,这样的解决方法很容易出错,而这个库可能是由不断增长的贡献者团队维护和发布的
npm是否将.npmignore
文件缓存在某个地方?如何使npm使用新设置
详细信息和快速参考: 操作系统:macOS 10.15.6
节点版本管理器:v0.7.6
节点:v12.14.1
npm:v6.13.7 package.json:
-- snip --
"files": [
"/common",
"/templates"
],
-- snip --
common/contracts/rust/target
common/contracts/out
templates/*/.cache
templates/*/assembly
-- snip --
-- snip --
npm notice 293.2kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9
npm notice 20.6kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9.dSYM/Contents/Resources/DWARF/build_script_build-140fa0ad757694f9
npm notice 297.4kB common/contracts/rust/target/debug/build/serde-3bef95b74f70906a/build_script_build-3bef95b74f70906a
-- snip --
.npmignore:
-- snip --
"files": [
"/common",
"/templates"
],
-- snip --
common/contracts/rust/target
common/contracts/out
templates/*/.cache
templates/*/assembly
-- snip --
-- snip --
npm notice 293.2kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9
npm notice 20.6kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9.dSYM/Contents/Resources/DWARF/build_script_build-140fa0ad757694f9
npm notice 297.4kB common/contracts/rust/target/debug/build/serde-3bef95b74f70906a/build_script_build-3bef95b74f70906a
-- snip --
npm包的输出--dryrun
:
-- snip --
"files": [
"/common",
"/templates"
],
-- snip --
common/contracts/rust/target
common/contracts/out
templates/*/.cache
templates/*/assembly
-- snip --
-- snip --
npm notice 293.2kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9
npm notice 20.6kB common/contracts/rust/target/debug/build/ryu-140fa0ad757694f9/build_script_build-140fa0ad757694f9.dSYM/Contents/Resources/DWARF/build_script_build-140fa0ad757694f9
npm notice 297.4kB common/contracts/rust/target/debug/build/serde-3bef95b74f70906a/build_script_build-3bef95b74f70906a
-- snip --
如果您想亲自尝试:
cd普通/合同/锈蚀
货物建造
(您需要)cd../../..
npm包——干运行
.npmignore
文件缓存在某处
我之前说“几乎”的原因是因为你在上次评论中说:
因此,在这种情况下,templates/*
中的所有路径都将被忽略,但common/contracts
中的路径将包含在包中
这种情况不应该发生,因为根据文档中所述的npm预期行为,(请参阅下面的“为什么会发生这种情况?”部分),考虑到您当前的包.json的文件
配置,.npmignore文件中当前指定的模式都不应该有效
您遇到的是奇怪的行为,即某些模式受到尊重,而其他模式则不受尊重,但希望通过遵循以下两种建议的解决方案/方法中的任何一种,您将获得正确的预期结果
为什么会这样? package.json的docs字段说明了与您的问题相关的以下内容: 注意:我添加了粗体强调 您还可以在包的根目录或子目录中提供一个
.npmignore
文件,这样可以避免包含文件在包的根目录处,它不会覆盖“文件”字段,但在子目录中会覆盖
因此,文件中当前指定的模式之所以没有被忽略,是因为它们试图覆盖package.json的files
字段中当前指定的包含模式。本质上,由于.npmignore文件当前位于包的根目录下,因此它不会覆盖“files”字段
解决
这里有两个不同的解决方案/方法要考虑(它们没有特定的顺序):
文件
条目,并根据需要扩充当前的.npmignore文件
i、 e.从package.json中删除此项:
同时,考虑到文档中指出:“在包的根目录下,[.npmignore]不会覆盖“文件”字段,但在子目录中它将”,那么您需要:
common/contracts/
目录中创建一个.npmignore文件,其中包含以下模式:
锈蚀/目标
出来
templates/
目录中创建包含以下模式的.npmignore文件:
*/.cache
*/装配
*/合同
*/package.json
*/高级文书主任/资产
*/src/config.js
*/src/global.css
*/src/utils.js
.npmignore
文件对于第二种方法变得多余
注意:希望遵循上述两种解决方案/方法中的任何一种(这两种方法与npm记录的期望非常一致),您将获得所需的结果。但是,如果这些建议的解决方案都没有产生所需的结果,那么我建议保留其中一个建议的解决方案作为基线起点,然后阅读中的一些答案。是的,问题与您的问题相反,但是您可能会进一步了解下一步,特别是from-它提到“npm打包和发布尊重目录树中的任何package.json文件,而不仅仅是根目录。”
因此,假设您的文档中当前指定的每个模式都没有被忽略,也就是说,它们都被包括在内。这是您认为问题所在的正确假设吗?还是仅仅是您说“我将这些添加到了.npmignore中?”",没有被忽略,而所有其他模式都被正确忽略?@RobC只有新添加的模式没有被正确拾取,但是我最初添加的模式被正确拾取。因此,在这种情况下,
templates/*
中的所有路径都被忽略,但是common/contracts
中的路径都包含在包中。谢谢,@RobC!此处已修复–如前所述,我错误地认为模板/*
规则工作正常。npm-pack
始终忽略符号链接,我现在还验证了npm-pack
在每个子目录中使用.gitignore
,这就是忽略.cache
文件夹的原因。所有templates/*
我最初的问题中的规则是多余的;是一种误导。