node grunt_使用Node.js和Grunt进行本地连续交付

node grunt

几天前,我读了Gregor Riegler的一篇旧博客文章 ,内容是关于懒惰的开发人员可能是软件开发人员的一个很好的特征(因为懒惰的开发人员总是质疑他们的工作方式,并尝试寻找新的方法来增加他们的工作经验) 。 只是成为一名更懒惰的开发人员? 听起来不错。 那是一个很好的技能–我想我那时是一个非常好的开发人员;)

还请参见: 开发人员在策略上是懒惰的

如今,每个人都在谈论持续交付。 如果您尚未实现它,那么您可能想要这样做。 但是不用担心–在这篇博客中,我不会谈论如何将代码交付到生产环境中以及如何执行。 今天,我想介绍本地连续交付的主题,又称:

自动化本地构建系统

警告:这不是JRebel或Springloaded帖子。 两者都是热重载类的良好工具,并且都有权存在。 但是,两者都有其局限性。 JRebel不是免费的,Springloaded无法识别项目所依赖的库中的更改。 而且,在开发过程中遇到错误时,您要做的第一件事(如果错误不明显)是关闭热类重载,因为您无法确定它会如何解决您的问题。预期。

现在,它来了–我自己的连续交付和热部署方法:与Java结合使用Grunt。 Grunt是基于Node.js的Javascript Taskrunner。 任务可以是Maven构建。 任务可以是复制命令。 任务可以是启动服务器的命令。 任务可以是文件侦听器。 任务可以是对特定URL的http调用以重置缓存。 任务可以是任何东西。 此外,可以链接多个任务,以便一个任务可以触发其他任务。 对于简短的介绍,请阅读Grunt 入门指南

因此,让我们从一个示例开始,以阐明我的想法。

鉴于:

  • 应用程序:JavaEE Multi-Module-Maven项目
  • 伺服器:Wildfly 8.2.0
  • IDE:Eclipse

目标:

文件更改后自动构建和部署项目。

要求:

您唯一需要手动安装的是Node.js本身。 之后,需要一个简单的npm install -g grunt-cli来安装grunt命令行界面。

然后在项目根目录中执行npm install grunt并创建package.json和Gruntfile.js文件。 package.json文件包含我们的Javascript依赖项。 在项目根目录中npm install后,它们会自动为您下载。

在Gruntfile.js中,我们配置了grunt任务。

应用结构

testbox
|__ testbox-ejb
|__ testbox-war
|__ pom.xml
|__ package.json
|__ Gruntfile.js

package.json

{{
   "devDependencies": {
      "grunt-contrib-watch": "latest",
      "grunt-notify": "~0.3.0",
      "grunt-shell-spawn": "latest",
      "load-grunt-tasks": "latest"
   }
}

Gruntfile.js

(function() {
	'use strict';

	var project = {
		javaFiles : [ 'testbox-war/src/main/java/**/*.java',
		              'testbox-ejb/src/main/java/**/*.java']
	};

	module.exports = function(grunt) {

		require('load-grunt-tasks')(grunt);
		grunt.loadNpmTasks('grunt-notify');

		grunt.initConfig({
			watch : {
				files : [ project.javaFiles ],
				tasks : [ 'notify:start',
				          'shell:build',
				          'shell:copy',
				          'notify:finished' ],
				options : {
					interrupt : true
				}
			},
			shell : {
				build : {
					command : 'mvn clean install -DskipTests',
					options : {
						stdout : true,
						stderr : true,
						failOnError : true,
						execOptions : {
							maxBuffer : "Infinite"
						}
					}
				},
				copy : {
					command : 'cp testbox-war/target/testbox-war-0.0.1-SNAPSHOT.war /Users/chrisyanx/wildfly-8.2.0.Final/standalone/deployments/testbox.war',
					options : {
						stdout : true,
						stderr : true,
						failOnError : true,
						execOptions : {
							maxBuffer : "Infinite"
						}
					}
				}
			},
			notify : {
				start : {
					options : {
						message : "Starting Deployment..."
					}
				},
				finished : {
					options : {
						message : "Finished"
					}
				}
			}

		});

		grunt.registerTask('default', [ 'watch' ]);

	};
})();

在文件的顶部,定义了一个变量project ,该项目代表我的项目结构。 在监视任务的配置中,进一步引用该内容是为了告诉Grunt监视插件应侦听的文件更改。 如果检测到文件更改,则会触发几个子任务: notify:start - shell:build - shell:copy - notify:finished

  1. 通知用户已检测到更改-notify:start
  2. 通过maven命令构建项目– shell:build
  3. 生成的war文件复制到正在运行的服务器– shell:copy
  4. 用户收到咕gr声已结束的通知notify:finished

将War软件包放入其部署文件夹后,无需重新启动JBoss Wildfly服务器。 但是,如果需要,还可以添加启动/停止服务器的艰巨任务。

启动它

只需在位于项目根目录的命令行界面中键入grunt ,然后按Enter。 然后更改文件,看看会发生什么。

有人可能会说,使用maven插件可以达到相同的效果。 我是真的,但在我眼里这不是一个干净而孤立的解决方案。 我宁愿不再污染Maven配置,而创建数十个Maven配置文件和插件。

此外,使用Grunt方法可以真正减轻IDE的负担,因为您不是在IDE中进行构建,并且服务器可以在终端中运行。 将此方法与JRebel或Springloaded结合使用,您可以变得更快!

翻译自: https://jaxenter.com/local-continuous-delivery-node-js-grunt-115584.html

node grunt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值