首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用git子模块导致发布时npm包过大

的问题是在项目中使用了git子模块,并且将子模块的代码也打包进了npm包,导致最终发布的npm包体积过大的情况。

Git子模块是一种将一个Git仓库作为另一个Git仓库的子目录的方式。它允许在一个项目中引用另一个项目的特定版本,并且可以方便地更新和管理子模块的代码。然而,当使用git子模块时,如果将子模块的代码也打包进了npm包,就会导致npm包的体积增大。

解决这个问题的方法是在构建npm包时排除掉git子模块的代码。可以通过在项目的.npmignore文件中添加相应的规则来实现。.npmignore文件类似于.gitignore文件,用于指定在构建npm包时需要排除的文件或目录。在.npmignore文件中添加子模块的路径,可以确保在构建npm包时不会将子模块的代码包含进去。

另外,还可以使用npm的files字段来明确指定需要包含在npm包中的文件。通过在项目的package.json文件中的files字段中列出需要包含的文件或目录,可以控制最终发布的npm包中只包含指定的文件,而不包含子模块的代码。

总结起来,解决使用git子模块导致发布时npm包过大的问题的方法是:

  1. 在项目的.npmignore文件中添加子模块的路径,确保在构建npm包时不会将子模块的代码包含进去。
  2. 使用npm的files字段来明确指定需要包含在npm包中的文件,控制最终发布的npm包中只包含指定的文件,而不包含子模块的代码。

腾讯云相关产品推荐:

  • 云开发(CloudBase):腾讯云提供的一站式后端云服务,支持前后端一体化开发,无需搭建服务器和运维,可快速构建应用。
  • 云原生应用引擎(TKE):腾讯云提供的容器服务,支持快速部署和管理容器化应用,提供高可用、弹性伸缩的容器集群。
  • 云数据库MySQL版(TencentDB for MySQL):腾讯云提供的高性能、可扩展的云数据库服务,支持自动备份、容灾、监控等功能,适用于各类应用场景。

更多腾讯云产品信息和介绍,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

前端工程化 - 剖析npm的包管理机制(完整版)

npm包命名规则 name 即模块名称,其命名时需要遵循官方的一些规范和建议: 包名会成为模块url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在包名中都不能使用,可以使用 validate-npm-package-name...如果你的包名与现有的包名太相近导致你不能发布这个包,那么推荐将这个包发布到你的作用域下。 例如:用户名 conard,那么作用域为 @conard,发布的包可以是@conard/react。...当然,引用 optionalDependencies 中安装的依赖时,一定要做好异常处理,否则在模块获取不到时会导致报错。...当你的软件发布到了正式环境,或者有稳定的API时,就可以发布1.0.0版本了。所以,当你决定对外部发布一个正式版本的npm包时,把它的版本标为1.0.0。...直到有子依赖包不在依赖其他模块。

3K93
  • 小程序工程化探索

    如此多的 NPM 包怎么管理呢,可以通过 lerna 进行统一维护、发布。 另外,跟随业界多端统一的步伐,NPM 包需要具有多端复用的能力。 ?...第一个手段是依赖分析,通过工具在打包时删掉未使用的文件、函数,释放空间。 另外一个手段是只能分包,打包时按照算法动态调整 NPM 包到主包或子包,临时调整分包大小。...具体实现可以参考这份代码,需要注意的是,一个函数没有被其他模块引用并不代表可以直接删除,还需要考虑模块内的引用情况,同时,写代码时尽量避免副作用。 ? 依赖分析可以删除未使用的文件、函数,释放空间。...看图,左边第一个分包使用了 cookie 和 md5 两个包,第二个分包则只使用了 cookie,通过算法配置,在编译时可以选择将两个 NPM 包都提到主包,这时主包大,分包小。...或者仅将共用的 cookie 提到主包,md5 留在分包,这时主包小,分包大。这样可以大幅度缓解发版时主包或者分包超限导致延期的问题。 ?

    1.9K61

    微前端模块共享你真的懂了吗

    ,可能是一个工具库,有可能是一个组件库,然后讲其打包成为npm包,然后在每个子应用中都安装该模块依赖,以此达到多个项目复用的效果 也就代表每个应用都有相同的npm包,本质上没有真正意义上的实现模块共享和复用...,只是代码层次共享和复用了,应用打包构建时,还是会将依赖包一起打包 劣势有以下 几点: 每个微应用都会打包该模块,导致依赖的包冗余,没有真正意义上的共享复用 当npm包进行更新发布了,微应用还需要重新构建...,调试麻烦且低效 (除非用npm link) 2.Git Submodule (子模块) 阿乐童鞋: 那如果我们没有搭建npm内网,又不想把模块开源出去,而且依赖npm,只要涉及变更需要重新发布,有没有其他方式可以解决以上问题呀...2.1 对比 npm 你可以试试 Git Submodule ,它提供了一种类似于npm package的依赖管理机制,两者差别如下图所示 2.2 如何使用 通过在应用项目中,通过git submodule...: 示作为 Host 时,去消费哪些 Remote; exposes :表示作为 Remote 时,export 哪些属性提供给 Host 消费 shared: 可以让远程加载的模块对应依赖改为使用本地项目的

    2.8K10

    package.json 知多少?

    npm包命名规则 name 即模块名称,其命名时需要遵循官方的一些规范和建议: 包名会成为模块url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在包名中都不能使用,可以使用 validate-npm-package-name...如果你的包名与现有的包名太相近导致你不能发布这个包,那么推荐将这个包发布到你的作用域下。 例如:用户名 conard,那么作用域为 @conard,发布的包可以是@conard/react。...当然,引用 optionalDependencies 中安装的依赖时,一定要做好异常处理,否则在模块获取不到时会导致报错。...bundledDependencies 和以上几个不同,bundledDependencies 的值是一个数组,数组里可以指定一些模块,这些模块将在这个包发布时被一起打包。...这个配置并不会阻止用户安装,而是会提示用户防止错误使用而引发一些问题。 private 如果将 private 属性设置为 true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。

    1.9K10

    5种前端代码共享方案:npm包、git submodules、脚手架模板、复制、UMD或模块联邦

    这五种包括:npm包git submodules脚手架模板生成复制UMD或模块联邦npm包被共享的代码作为npm包,由引用方通过npm install安装。...有完善的使用文档。误区很多人认为,自己开发都是私有库,是不是不能用npm了?你可能以为npm必须发布到公开的,才能用。其实不是这样的,npm也可以从git仓库安装依赖。...你可以不发布到npm,也可以只把产物(或源码)上传git仓库。所以个人开发者也能用npm,只是我认为效率不高罢了,不如直接用 git submodules。...脚手架可能会预先安装一些依赖,这些依赖是npm包,开发者需要阅读脚手架文档来了解。代码生成后,代码全放在引用方的仓库里,开发者可能随时修改文件。因此,脚手架模板更新时,项目更新难度相对较高。...(这样每次更新时无需主动发布)减少公共资源的重复加载,提高用户体验。我的选择我是个人开发者,所以我放弃了npm包,选用了git submodule。

    11.1K61

    102.精读《Monorepo 的优势》

    精读 总的来说,虽然拆分子仓库、拆分子 NPM 包(For web)是进行项目隔离的天然方案,但当仓库内容出现关联时,没有任何一种调试方式比源码放在一起更高效。...在前端开发环境中,多 Git Repo,多 Npm 则是这个理想的阻力,它们导致复用要关心版本号,调试需要 Npm Link。...对于共用的包通过 Npm 安装,如果不能接受调试编译后的代码,或每次 npm link 一下,就没有办法调试依赖的子包。...IDE 遇到子文件夹中的配置文件,导致全局配置失效或异常。...同时包之间的引用也通过更通用的 symlink 完成,这导致了还是要在子模块目录存在 node_modules 文件夹,而且效果依赖项目初始化命令。

    60710

    Node.js 编写 CLI 的实践

    有三个理由: 对Javascript语言更加熟悉 npm 完善的生态系统 npm OS无关的包管理机制 主要原因还是归咎于npm 完善的生态,目前npm官方有47.5万个三方包可供使用,你可以很方便的使用一些已经编写的很不错的轮子去帮你快速开发...如果你使用shell或者其它语言来编写CLI,你需要针对各个主流OS来做兼容并且发布到不同的平台。...看个demo 注: 此处的Logo使用的是figlet这个npm包, demo地址 npm关联CLI的基本原理 如何让Node.js编写的包可执行?...模块发布到npm上后,开发者安装这个包的时候会检查是否有bin字段,如果有bin字段则会使用软链接的方式创建可以全局使用的命令。...可以在工程根目录下加.gitattributes文件,设置* text eol=lf,这样 git提交时就不会讲LF转换成CRLF 原文链接:http://www.ivweb.io/topic/5918069a869edc1f59d6ba13

    2.5K00

    lerna 从0到1

    简介 Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化。 多包管理器 背景 当前手上需要同时维护几个npm工具包,有些包与包之间存在依赖管理。...lerna 4.0.0 DEMO 目录 root/ lerna.json lerna 配置 package.json packages/ npm包集合 pkg-ts npm 子包 pkg-es6 安装...例如我们存在包 A: v1.0.0 , b: v2.0.0 lerna.json v1.0.0。 发布新版本时,更新版本为v1.1.0。...例如我们之前为使用lerna 管理的独立npm包, 导入到lerna项目包集合后, 可以使用改目录导入相关 git 记录等 lerna import 包地址> 参数: --faltten lerna...diff info 显示环境信息 lerna info 问题 发布时git add 失败 这里我在.gitignore 中忽略了, 版本锁文件。

    1.3K30

    基于 Lerna 管理 packages 的 Monorepo 项目最佳实践

    pkg-main和pkg-npm的package.json耦合在一起,导致一些本来是工程的开发依赖也会发布到 npm 上去,变成pkg-npm 的依赖包。 依赖的包冗余。...发布需要手动修改版本号。 因为最终只发布了一个包,但实际逻辑要求这个包即要全局安装又要本地安装,业务没有拆开,导致要安装两遍。...耦合一起,即便使用 npm link 也会导致调试困难, 发版没有 CHANGELOG.md。...Lerna 是一个管理多个 npm 模块的工具,是 Babel 自己用来维护自己的 Monorepo 并开源出的一个项目。优化维护多包的工作流,解决多个包互相依赖,且发布需要手动维护多个包的问题。...安装配置完成后,想通过 git commit 或者其它第三方工具提交时,只要提交信息不符合规范就无法提交。从而约束开发者使用 npm run c 来提交。

    3K61

    什么时候不能在 Node.js 中使用 Lock Files

    所以 yarn 和 npm 在引入了所谓的“lock file”,来跟踪你依赖项确切的版本。但是当你在开发要发布到 npm 的包时,应避免使用这类 lock file 。...但是如果将库或 CLI 发布到 npm,则永远不要发布 lock file。因为如果你使用它,则意味着你和你的用户可能在使用不同版本的依赖项。 什么是Lock File?...如果 npm 或 yarn 找到它们各自的 lock file,将使用它们代替模块安装。这对于持续集成(CI)等情况尤其有用。...那么当我们编写要发布到 npm 的库时,为什么不能做同样的事呢?要回答这个问题,首先要讨论发布的工作原理。...如何发布模块 与某些人想的相反,你发布到 npm 的内容并不总是与 GitHub 上或项目中的内容完全相同。

    1.4K30

    Npm vs Yarn 之备忘大全

    npm 开始作为 Node 包管理器,所以你会发现很多模块可以在服务器端使用。也有很多的包添加命令供您在命令行中使用。你还会发现可以在前端使用的软件包。...它并没有试图完全取代 npm。Yarn 同样是一个从 npm 注册源获取模块的新的 CLI 客户端。注册的方式不会有任何变化 —— 你同样可以正常获取与发布包。...npm link yarn link 开发时链接依赖包,以便在其他项目中使用 npm unlink yarn unlink 取消链接依赖包 npm publish yarn publish 将包发布到......... npm 使用之额外技巧 如何寻找适宜的 npm 包 找到合适的软件包可能相当具有挑战性 ——,毕竟有成千上万个模块供你选择。...具体例子来说,有些时候会有需求要删除 Git 仓库所有提交历史,而保留代码为当前状态;而删除 .git 文件夹可能会导致您的 git 存储库中的问题;所以可以使用另一种更为安全的办法:详见[如何删除 Git

    1.6K90

    微前端qiankun从搭建到部署的实践总结

    公共代码抽取后,其他的应用如何使用呢? 可以让common发布为一个npm私包,npm私包有以下几种组织形式: npm指向本地file地址:npm install file:../common。...直接在根目录新建一个common目录,然后npm直接依赖文件路径。 npm指向私有git仓库: npm install git+ssh://xxx-common.git。 发布到npm私服。...本demo因为是基座和子应用都集合在一个git仓库上,所以采用了第一种方式,但实际应用时是发布到npm私服,因为后面我们会拆分基座和子应用为独立的子仓库,支持独立开发,后文会讲到。.../common方式安装的common就不适用了,所以最好还是发布到公司的npm私服或采用git地址形式。...这里主要考虑了三种方案: 使用git submodule。 使用git subtree。 单纯地将所有子仓库放到聚合目录下并.gitignore掉。 使用lerna管理。

    2.2K11

    Node.js安装详细教程

    -g 模块时,下载了一个全局包,这个包的默认存放路径C:\Users\xxx\AppData\Roaming\npm\node_modules下,时间长了肯定会占用C盘的资源,所以需要我们在node.js...\node_global,如下: 测试 安装cli测试一下(这是我需要的,自行测试自己的模块),通过npm install -g @vue/cli安装 这样就装好了 注意 在安装模块的时候建议使用管理员身份打开...cmd,避免不必要的错误 安装模块过大,网络不稳定可能报错timeout等问题,重来一次就好了 常见命令 node -v:查看node版本 npm -v:查看npm版本 npm root -g:查看包的存放路径...配置安装全部的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。...devDependencies配置安装全部的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。

    1.3K10

    Npm vs Yarn 之备忘详单

    npm 开始作为 Node 包管理器,所以你会发现很多模块可以在服务器端使用。也有很多的包添加命令供您在命令行中使用。你还会发现可以在前端使用的软件包。...它并没有试图完全取代 npm。Yarn 同样是一个从 npm 注册源获取模块的新的 CLI 客户端。注册的方式不会有任何变化 —— 你同样可以正常获取与发布包。...npm link yarn link 开发时链接依赖包,以便在其他项目中使用 npm unlink yarn unlink 取消链接依赖包 npm publish yarn publish 将包发布到...具体例子来说,有些时候会有需求要删除 Git 仓库所有提交历史,而保留代码为当前状态;而删除 .git 文件夹可能会导致您的 git 存储库中的问题;所以可以使用另一种更为安全的办法:详见如何删除 Git...而且,不同的库包之间也存在其他依赖。理想状态下使用语义化版本发布补丁不会包含大的变化,但不幸的是这必非真理。

    1.4K30

    在 monorepo 中怎么组织和优化研发流程?

    github --yes", 第 6 步是通过 github actions yaml 文件配置的,执行的主要脚本就是打包构建以及发布到 npm。...但是在使用的过程中,我也发现一个问题,lerna version 不仅会修改真正发生内容变化的子包的版本号,还会修改 workspaces 中引用了这个子包的其他子包的版本号。...如果所有子包都各自独立打包,其实是有问题的,比如当多个 release 对应的 workflow 同时进行时,如果包 A 依赖的某个包 B 还没打包并发布到 npm registry,就有可能导致 A...而不做 commit 就会导致 git 工作区不是 clean 状态,这会导致后续的 release-it 流程无法继续。...同时子包每个版本的 CHANGELOG.md 都是“大而全”。 这基本上就崩盘了,版本号都不对了。

    1.1K30

    小程序 boilerplate cli 工具教程

    实现 根据上面一节,先安装依赖的包: npm install commander download-git-repo mkdirp --save // 这个三个插件是使用时依赖,而不仅仅是开发依赖,所以用...,更新可以同步到全局,建议再执行: npm link 12.png (gif 过大无法展示,附件不允许添加图片…大家想象一下好了) 发布 使用 npm publish 发布到 npmjs 上,具体可以参考文档...可以看到 npm 上已经有很多类似的插件了: 09.png 作为一个 boilerplate 可能会根据团队/个人需求不同而不同,发布一个自己常用的,方便在各个设备上拉取使用,所以 scoped package...,你值得拥用,只是在发布和安装的时候需要敲比较长的包名,使用时不用: 10.png 11.png 有 scope 的包默认发布的时候是有私有的,这个是 npm 付费用户才能使用的权限,免费用户要发布这样的包需要带参数...如果有更轻量的方法请告诉我~ 参考资料 其他开发者写的工具:MeCKodo/wxapp-cli ES2015 & babel 实战:开发 NPM 模块 Creating Your First Node.js

    2.4K30

    作为一个程序员居然还没有属于自己的一个博客?

    搭建步骤 安装git,这个我就不详细介绍了,默认程序员应该都是会的,如果有没有用过的可以看看我以前写的这个文章《10分钟带你入门git和github》。...3.安装hexo安装hexo 需要使用npn命令。npm默认的源的下载速度可能很慢,建议使用淘宝镜像替换。执行下面的命令,将npm的源设置成淘宝镜像站。...接下来 安装博客所需要的依赖文件 npm install 接下来在执行下 hexo g & hexo s 至此整个博客就发布完成了,我们在浏览器输入http://localhost:4000/ 就可以看到我们的一个博客界面了...本地目录要发布到gitee 需要执行 npm install hexo-deployer-git --save 然后我们在执行下 hexo clean & hexo g & hexo d 然后我们就可以看到...集成评论 我采用的是Gitalk 评论模块 集成这个模块的时候经常会有Error: Network Error 这个错误 ?

    64720

    2018 年了,你还是只会 npm install 吗?

    url, 该 url 所指向的代码库满足条件 (a) git@github.com:webpack/webpack.git 2.2 安装本地包/远程git仓库包 上面表格的定义意味着,我们在共享依赖包时...://isaacs@github.com/npm/npm.git git://github.com/npm/npm.git#v1.0.27 场景3: 开源 package 问题修复 使用某个 npm 包时发现它有某个严重...4.2 依赖版本升级 问题来了,在安装完一个依赖包之后有新版本发布了,如何使用 npm 进行版本升级呢?...虽然 semver 约定了小版本号应当保持向下兼容(相同大版本号下的小版本号)兼容,但万一有不熟悉不遵循此约定的包发布者,发布了不兼容的包,此时就可能出现因依赖环境不同导致的 bug。...package-lock 文件 合理使用多样化的源安装依赖包: npm install git url>| 使用 npm: >=5.2 版本 使用 npm scripts 与

    6.6K160
    领券