我开始对 RyanZim 的回答发表评论,因为他的技术是正确的。但是,我想给出一个稍微不同的方法。我们公司维护着许多开源项目,这就是我们会为您提供建议的方式。
- 像往常一样继续开发您的项目。您的
.gitignore
文件应该忽略您的 dist 目录(/build
在您的情况下)。
- 当你准备好部署时,你想构建你的代码,在 package.json 中添加你的版本号,标记更改,并将构建的代码推送到 github 和 npm。
主要想法是我们希望在 github 中保留我们构建代码的副本以及该版本的“标签”。这使我们能够准确地看到任何特定版本推送到 npm 的内容。构建的代码不是主分支的一部分,而是仅存在于标签下(有点像分支)。当用户报告错误并且他使用版本 xxx 时,您可以检查确切的版本并开始调试。当您修复错误时,您会发布一个新的“补丁”,您的用户将在下次运行npm install
或npm update
.
我们创建了一组 npm 脚本来为我们完成大部分工作。这是我们使用的(在你的 package.json 中):
"scripts": {
"build": "node build.js",
"preversion": "npm run build",
"version": "git commit -am \"Update dist for release\" && git checkout -b release && git add -f dist/",
"postversion": "git push --tags && git checkout master && git branch -D release && git push",
"release:pre": "npm version prerelease && npm publish",
"release:patch": "npm version patch && npm publish",
"release:minor": "npm version minor && npm publish",
"release:major": "npm version major && npm publish"
}
我知道这可能看起来令人困惑,所以让我解释一下。每当我们准备好发布新代码时,我们都会运行其中一个release:
命令。例如,当我们运行时npm run release:minor
,这里是按顺序运行的命令列表。我已经对其进行了注释,因此您可以看到会发生什么:
node build.js ## run the build code - you will want to run gulp instead
npm version minor ## bumps the version number in package.json and creates a new git tag
git commit -am "Update dist for release" ## commit the package.json change to git (with new version number) - we will push it at the end
git checkout -b release ## create a temporary "release" branch
git add -f dist/ ## force add our dist/ directory - you will want to add your build/ directory instead
npm publish ## push the code to npm
git push --tags ## push the built code and tags to github
git checkout master ## go back to the master branch
git branch -D release ## delete the temporary "release" branch
git push ## push the updated package.json to github
如果您有任何问题,请询问。您可能希望以稍微不同的顺序做事,因为您的情况略有不同。请随时提出问题。这段代码在几十个项目上运行良好——我们每天多次发布新代码。