如何创建含默认NPM模块与配置的Git仓库,实现统一配置管理
搞定统一NPM配置+快速新项目生成的方案
哈哈,这个需求我太熟了!我之前也折腾过类似的场景——想把TS、Prettier、TSLint这些配置统一管理,又能快速生成新项目,不用每次都复制粘贴一堆配置文件。你之前踩的坑我也踩过:把配置塞到自定义模块里,结果新项目根本读不到模块目录外的配置,完全达不到预期。下面给你几个亲测有效的解决方案,分分钟解决你的问题!
一、先把公共配置做成可继承的NPM模块
核心思路是:把你的默认配置(tsconfig、prettier、tslint)单独打包成NPM模块,让新项目的配置文件通过extends字段引用它。这样既保证新项目根目录有自己的配置文件,又能从一处统一更新所有项目的核心配置。
1. 打造你的公共配置模块(以TS配置为例)
- 新建个仓库,比如叫
my-shared-ts-config,结构超简单:
my-shared-ts-config/ ├── package.json └── tsconfig.json # 这里放你所有的默认TS配置,比如target、module这些
- 给
package.json加几个关键字段,确保能被正确识别:
{ "name": "my-shared-ts-config", "version": "1.0.0", "main": "tsconfig.json", "private": true # 如果是私有仓库就加这个,避免误发布到公网 }
- 把这个模块发布到你们的私有NPM仓库,或者直接用Git地址作为依赖(比如
"my-shared-ts-config": "git+https://your-git-repo-url.git")。
2. 新项目里轻松引用公共配置
新项目的tsconfig.json不用写一堆重复配置了,只需要继承公共模块,再加项目特有的配置就行:
{ "extends": "my-shared-ts-config", "compilerOptions": { // 比如项目专属的输出目录、根目录 "outDir": "./dist", "rootDir": "./src" }, "include": ["src/**/*"] }
Prettier和TSLint也支持这种玩法:
- Prettier:
.prettierrc直接写"extends": "my-shared-prettier-config" - TSLint:
tslint.json里加"extends": "my-shared-tslint-config"
这样一来,所有新项目的配置文件都在根目录,工具能正常识别;而且核心配置都来自你的公共模块,后续改配置只需要更新公共模块的版本,所有项目跑个npm update就能同步最新配置!
二、一键生成带默认配置的新项目
光有公共配置还不够,得能快速生成新项目,不然每次手动建文件、加依赖也麻烦。给你两种简单的方式:
方式1:用npm init自定义模板(推荐!官方玩法)
- 建个项目模板仓库,比如
my-npm-starter,结构如下:
my-npm-starter/ ├── package.json # 里面包含默认依赖:typescript、prettier、还有你的公共配置模块 ├── tsconfig.json # 就是上面说的继承公共配置的文件 ├── tslint.json ├── .prettierrc ├── src/ │ └── index.ts # 甚至可以加个默认的入口文件 └── .gitignore
- 把这个仓库发布成
create-my-npm-starter(npm init要求模板包名必须是create-xxx或者@scope/create-xxx),然后在package.json里加个bin脚本:
{ "name": "create-my-npm-starter", "version": "1.0.0", "bin": "./create-project.js", "dependencies": { "fs-extra": "^11.0.0" # 用来复制文件的工具 } }
- 写个简单的
create-project.js脚本,负责把模板文件复制到新项目目录:
#!/usr/bin/env node const fs = require('fs-extra'); const path = require('path'); const projectName = process.argv[2] || path.basename(process.cwd()); const targetDir = path.join(process.cwd(), projectName); const templateDir = path.join(__dirname, 'template'); // 把模板文件都放template文件夹里更整洁 // 复制模板文件 fs.copySync(templateDir, targetDir); // 修改package.json的项目名称 const pkgPath = path.join(targetDir, 'package.json'); const pkg = require(pkgPath); pkg.name = projectName; fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2)); console.log(`🎉 新项目 ${projectName} 创建完成!`); console.log(`👉 请执行:cd ${projectName} && npm install`);
- 发布之后,创建新项目只需要跑:
npm init my-npm-starter my-new-project
一键搞定所有配置和初始文件!
方式2:Git模板仓库+简单脚本(不想发NPM包的话用这个)
如果不想折腾NPM包,直接用Git仓库当模板也很方便:
- 把你的模板仓库推到GitHub/GitLab,比如
https://github.com/your-name/my-npm-template.git - 写个bash脚本
create-project.sh:
#!/bin/bash read -p "请输入项目名称:" PROJECT_NAME # 克隆模板仓库 git clone https://github.com/your-name/my-npm-template.git $PROJECT_NAME cd $PROJECT_NAME # 删掉模板的Git记录,初始化新的仓库 rm -rf .git git init # 修改package.json里的项目名称 sed -i '' "s/\"name\": \"my-npm-template\"/\"name\": \"$PROJECT_NAME\"/" package.json echo "✅ 项目创建完成!" echo "📦 请执行:npm install"
- 给脚本加执行权限:
chmod +x create-project.sh - 以后创建新项目就跑:
./create-project.sh
输入项目名就行,超简单!
三、统一更新所有项目的配置
当你需要修改默认配置时,步骤超简单:
- 更新你的公共配置模块(比如
my-shared-ts-config)的配置,然后发布新版本 - 在每个新项目里跑:
npm update my-shared-ts-config my-shared-prettier-config my-shared-tslint-config
就能同步最新配置。如果项目多,可以用npm-check-updates工具批量更新,或者写个脚本遍历所有项目目录自动执行更新命令。
内容的提问来源于stack exchange,提问作者cJayy
相关产品推荐
相关产品推荐

