前端项目中能否将package.json移动到子文件夹中存放?
配置文件移入configs子文件夹的可行性结论
这种项目结构组织方式 默认不可行,会直接导致项目无法正常运行。核心原因是前端全链路工具链的默认逻辑,都是以执行命令的项目根目录为基准查找、读取各类配置文件,具体的影响点如下:
- 包管理工具逻辑失效:
npm/yarn/pnpm这类包管理器在执行依赖安装、脚本运行操作时,会从当前命令执行的目录向上递归查找package.json和对应的锁文件。如果把这类文件挪到configs子目录,你在project根目录执行安装命令时根本识别不到依赖声明,node_modules的安装路径、依赖寻址逻辑会完全错乱。 - 框架与构建工具运行报错:不管是React生态的CRA、Next.js,Vue生态的Vite、Vue CLI,还是底层的Webpack、Rollup等构建工具,默认都会从项目根目录读取依赖声明、配置规则,找不到对应文件时会直接启动失败、构建中断。
.gitignore忽略规则不生效:Git默认从仓库根目录、命令执行目录向上查找.gitignore文件加载忽略规则,把它放到configs目录后,规则仅对configs目录下的内容生效,外层的node_modules、src、public目录的忽略规则完全不生效,很容易误提交大体积依赖、临时构建文件到代码仓库。- 补充:
README.md这类不参与工具运行逻辑的说明文档,放到任意目录都不会影响项目运行,没有位置限制。
坚持要集中存放配置文件的适配方案
这种组织方式不是完全无法实现,但需要做大量额外适配,维护成本很高,没有特殊需求不推荐使用:
- 方案一:直接把
configs目录作为实际的项目根目录,将src、public、node_modules全部移动到configs目录下,所有项目相关的命令都在configs目录内执行,外层的project目录仅作为外层容器使用即可。 - 方案二:在
project根目录保留一个极简的入口package.json,通过脚本指定工作目录为configs,同时给所有用到的构建工具、代码检查工具手动传参,指定对应的配置文件路径、源码目录、静态资源目录;另外还要在Git仓库根目录额外配置忽略规则,关联configs/.gitignore的规则。这套配置非常零散,后续升级工具版本、新增工具链的时候很容易出现路径不兼容的问题。
内容的提问来源于stack exchange,提问作者Adomas Gaudiesius
相关产品推荐
相关产品推荐

