我开发了一个生活在基于节点的项目中的Angular网站。 Gulp用于构建站点的开发和生产版本的源。该项目包括一个ExpressJS服务器,可以提供文件的dev或prod版本。 现在我想以CI方式构建和部署网站。
我有一个私有的NPM注册表,我可以将整个项目模块发布到。简单的路线是:
npm install
npm publish
npm install project
但这似乎并不合适。难道我不能在生成过程中输出生产文件,并使用NPM将这些作为版本化工件发布吗? 是否有可接受的,不同的方式来发布NPM模块以进行开发和部署?
或者我是否在生产环境中构建我的源代码?这不能破坏NODE_ENV =生产的目的吗?
答案 0 :(得分:1)
这取决于您托管服务器的位置。
如果要部署到heroku,可以按照https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction并安装gulp构建任务https://github.com/appstack/heroku-buildpack-nodejs-gulp。基本上,您将把要部署的版本推送到heroku的git服务器,它将自动触发dev或prod的构建过程并启动快速服务器。假设您已经在项目中使用git,那么只需要添加一个新的遥控器。
如果你想部署到亚马逊的弹性beanstalk,它会更复杂一点,但这一切都归结为将你的应用程序代码推送到服务,这将触发主机实例中的构建过程
如果要在环境中部署它,仍然可以使用git push和git hook来触发部署。查看How can I automatically deploy my app after a git push ( GitHub and node.js)?了解各种实现方法。
关于你的问题"我不应该将生产文件作为构建过程的一部分输出,并将它们作为版本化工件发布到NPM":你可以,但这不是最重要的人们这样做。只要您的构建过程可重复,就没有理由打包和发布应用程序的内置版本。我假设你正在构建一个应用程序,而不是一个可重用的库,在这种情况下它将是一个不同的故事。