1. 谈谈grunt和gulp的区别
自nodeJS登上前端舞台,自动化构建变得越来越流行。目前最流行的当属grunt和gulp,这两个光看名字挺像,功能也差不多,不过gulp能在grunt这位大哥如日中天的境况下开辟出自己的一片天地,有着她独到的优点。
1、易用 Gulp相比Grunt更简洁,而且遵循代码优于配置策略,维护Gulp更像是写代码。
2、高效 Gulp相比Grunt更有设计感,核心设计基于Unix流的概念,通过管道连接,不需要写中间文件。
3、高质量 Gulp的每个插件只完成一个功能,这也是Unix的设计原则之一,各个功能通过流进行整合并完成复杂的任务。例如:Grunt的imagemin插件不仅压缩图片,同时还包括缓存功能。他表示,在Gulp中,缓存是另一个插件,可以被别的插件使用,这样就促进了插件的可重用性。目前官方列出的有673个插件。
4、易学 Gulp的核心API只有5个,掌握了5个API就学会了Gulp,之后便可以通过管道流组合自己想要的任务。
5、流 使用Grunt的I/O过程中会产生一些中间态的临时文件,一些任务生成临时文件,其它任务可能会基于临时文件再做处理并生成最终的构建后文件。而使用Gulp的优势就是利用流的方式进行文件的处理,通过管道将多个任务和操作连接起来,因此只有一次I/O的过程,流程更清晰,更纯粹。
6、代码优于配置 维护Gulp更像是写代码,而且Gulp遵循CommonJS规范,因此跟写Node程序没有差别。
2. gruntfile.js怎么运行
工具/原料NodeJsWindows系统方法/步骤要使用Grunt,第一件事是安装Node.js。(即使你没用过Node.js也不用担心——你只需安装它让Grunt能运行。)安装了Node.js之后,用命令行工具执行以下命令:$npminstall-ggrunt-cli要确认Grunt是否正确安装,可以使用以下命令:$grunt--version下一步是在你的项目的根目录下创建package.json和gruntfile.js两个文件。创建package.json文件这个JSON文件让我们指定我们的开发环境所依赖的必须模块。有了它,项目的所有开发者都能保证安装上一致的必须模块,从而保证所有人拥有一样的开发环境。在项目根目录下的pacakge.json文件中写上:{"name":"SampleGrunt","version":"0.1.0","author":"BrandonRandom","private":true,"devDependencies":{"grunt":"~0.4.0"}}然后在命令行工具运行:$npminstall该命令告诉npm需要安装的必须模块,npm会安装它们,自动保存在项目根目录下一个叫做node_moles的文件夹里。创建gruntfile.js文件gruntfile.js文件本质上就是一个wrapper函数,接受grunt作为参数:mole.exports=function(grunt){grunt.initConfig({pkg:grunt.file.readJSON('package.json')});grunt.registerTask('default',[]);};现在你已经可以在项目根目录下运行grunt命令行工具了。$grunt>Task"default"notfound.Use--forcetocontinue.这里我们只指定了Grunt作为必须模块,还没定义任何任务。接下来我们就要指定任务和必须模块。首先来看如何拓展package.json文件。拓展package.json文件使用Node.js最好的一点,就是它可以根据package.json文件的内容,一次性查找和安装多个package。要安装我们项目的所有必须任务,只须在package.json文件中加上以下内容:{"name":"SampleGrunt","version":"0.1.0","author":"MikeCunsolo","private":true,"devDependencies":{"grunt":"~0.4.0","grunt-contrib-cssmin":"*","grunt-contrib-sass":"*","grunt-contrib-uglify":"*","grunt-contrib-watch":"*","grunt-cssc":"*","grunt-htmlhint":"*","matchdep":"*"}}那么如何实现安装?你肯定已经猜到了:$npminstall使用Grunt载入任务package安装好后,还必须被Grunt载入才能为我们所用。使用matchdep,我们用一行代码就可以自动载入所有任务。这是开发流程的一大优化,因为现在我们只须把必须任务列表写在package.json一个文件里,便于管理。在gruntfile.js里,grunt.initConfig之上,写上以下代码:require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);要是没有matchdep,我们就必须为每一个必须任务写一次grunt.loadNpmTasks(“grunt-task-name”);,随着我们使用的任务的增加,这些载入任务的代码很快就会变得相当繁冗。在Grunt载入这些任务前,我们还可以指定设置选项。现在我们需要创建我们的HTML文件(index.html):用HTMLHint验证HTML在grunt.initConfig里加入下列设置代码:htmlhint:{build:{options:{'tag-pair':true,'tagname-lowercase':true,'attr-lowercase':true,'attr-value-double-quotes':true,'doctype-first':true,'spec-char-escape':true,'id-unique':true,'head-script-disabled':true,'style-disabled':true},src:['index.html']}}一般来说,一个plugin的设置方法如下:plugin的名称(去掉grunt-contrib-或grunt-前缀),选择使用此plugin的一个或多个对象(在这里可以给不同文件设置此plugin的不同选项),一个选项object,以及plugin要作用的对象。现在,如果我们用命令行工具运行grunthtmlhint,该plugin就会检查我们在src里指定的HTML文件,验证其中有没有错误!但是每个小时都要手动运行几次这个任务,很快就让人觉得很繁琐了。自动化任务运行watch是一个特殊的任务,它可以在目标文件保存时自动触发一系列任务的运行。在grunt.initConfig里加入以下设置:watch:{html:{files:['index.html'],tasks:['htmlhint']}}然后,在命令行工具中运行gruntwatch命令。现在,你可以试试在index.html里加一行注释,保存文件。你会注意到,保存文件时会自动触发HTML的验证!这是对开发流程的一大优化:在你写代码时,watch任务就会默默同时为你验证代码,如果验证失败任务就会报告失败(它还会告诉你问题在哪)。注意gruntwatch任务会一直运行,直到命令行工具关闭,或手动停止(control+c在Mac中)。保持JavaScript极简让我们来写一个验证用户输入的名字的JavaScript文件。简便起见,我们这里只检查其中是否含有非字母的字符。我们的JavaScript会使用strict模式,这可以防止我们写可用但低质量的JavaScript。创建assets/js/base.js文件并在其中写上:functionValidator(){"usestrict";}Validator.prototype.checkName=function(name){"usestrict";return(/[^a-z]/i.test(name)===false);};window.addEventListener('load',function(){"usestrict";document.getElementById('firstname').addEventListener('blur',function(){var_this=this;varvalidator=newValidator();varvalidation=document.getElementById('namevalidation');if(validator.checkName(_this.value)===true){validation.innerHTML='Looksgood!:)';validation.className="validationyep";_this.className="yep";}else{validation.innerHTML='Looksbad!:(';validation.className="validationnope";_this.className="nope";}});});让我们用UglifyJS来极简化这个源代码,在grunt.initConfig中加上以下设置:uglify:{build:{files:{'build/js/base.min.js':['assets/js/base.js']}}}UglifyJS会替换所有的变量和函数名,剔除所有空白和注释,从而生成占据最小空间的JavaScript文件,对发布非常有用。同样地,我们需要设置一个watch任务来使用它,在watch的设置里加入以下代码:watch:{js:{files:['assets/js/base.js'],tasks:['uglify']}}9现在我们有了一个静态HTML页面,一个存放Sass和JavaScript源文件的assets文件夹,一个存放优化后的CSS和JavaScript的build文件夹,以及package.json文件和gruntfile.js文件。至此你已经有了一个不错的基础来进一步探索Grunt。像之前提到的,一个非常活跃的开发者社区在为Grunt开发前端plugin。我建议你现在就到pluginlibrary去看看那300个以上的plugin。
3. 怎样用grunt创建gruntfile文件
工具/原料
NodeJs
Windows系统
方法/步骤
要使用Grunt,第一件事是安装Node.js。(即使你没用过Node.js也不用担心——你只需安装它让Grunt能运行。)
安装了Node.js之后,用命令行工具执行以下命令:
$ npm install -g grunt-cli
要确认Grunt是否正确安装,可以使用以下命令:
$ grunt --version
下一步是在你的项目的根目录下创建package.json和gruntfile.js两个文件。
创建package.json文件
这个JSON文件让我们指定我们的开发环境所依赖的必须模块。有了它,项目的所有开发者都能保证安装上一致的必须模块,从而保证所有人拥有一样的开发环境。
在项目根目录下的pacakge.json文件中写上:
{
"name" : "SampleGrunt",
"version" : "0.1.0",
"author" : "Brandon Random",
"private" : true,
"devDependencies" : {
"grunt" : "~0.4.0"
}
}
然后在命令行工具运行:
$ npm install
该命令告诉npm 需要安装的必须模块,npm会安装它们,自动保存在项目根目录下一个叫做 node_moles 的文件夹里。
创建gruntfile.js文件
gruntfile.js 文件本质上就是一个wrapper函数,接受grunt作为参数:
mole.exports = function(grunt){
grunt.initConfig({
pkg: grunt.file.readJSON('package.json')
});
grunt.registerTask('default', []);
};
现在你已经可以在项目根目录下运行grunt命令行工具了。
$ grunt
> Task "default" not found. Use --force to continue.
这里我们只指定了Grunt作为必须模块,还没定义任何任务。接下来我们就要指定任务和必须模块。首先来看如何拓展package.json文件。
拓展package.json文件
使用Node.js最好的一点,就是它可以根据package.json文件的内容,一次性查找和安装多个package。要安装我们项目的所有必须任务,只须在package.json文件中加上以下内容:
{
"name" : "SampleGrunt",
"version" : "0.1.0",
"author" : "Mike Cunsolo",
"private" : true,
"devDependencies" : {
"grunt" : "~0.4.0",
"grunt-contrib-cssmin": "*",
"grunt-contrib-sass": "*",
"grunt-contrib-uglify": "*",
"grunt-contrib-watch": "*",
"grunt-cssc": "*",
"grunt-htmlhint": "*",
"matchdep": "*"
}
}
那么如何实现安装?你肯定已经猜到了:
$ npm install
使用Grunt载入任务
package安装好后,还必须被Grunt载入才能为我们所用。使用 matchdep,我们用一行代码就可以自动载入所有任务。这是开发流程的一大优化,因为现在我们只须把必须任务列表写在package.json一个文件里,便于管理。
在gruntfile.js里,grunt.initConfig之上,写上以下代码:
require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);
要是没有matchdep,我们就必须为每一个必须任务写一次grunt.loadNpmTasks(“grunt-task-name”); ,随着我们使用的任务的增加,这些载入任务的代码很快就会变得相当繁冗。在Grunt载入这些任务前,我们还可以指定设置选项。
现在我们需要创建我们的HTML文件(index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
<title>Enter your first name</title>
<link rel="stylesheet" href="build/css/master.css">
</head>
<body>
<label for="firstname">Enter your first name</label>
<input id="firstname" name="firstname" type="text">
<p id="namevalidation" class="validation"></p>
<script type="text/javascript" src="build/js/base.min.js"></script>
</body>
</html>
用HTMLHint验证HTML
在grunt.initConfig里加入下列设置代码:
htmlhint: {
build: {
options: {
'tag-pair': true,
'tagname-lowercase': true,
'attr-lowercase': true,
'attr-value-double-quotes': true,
'doctype-first': true,
'spec-char-escape': true,
'id-unique': true,
'head-script-disabled': true,
'style-disabled': true
},
src: ['index.html']
}
}
一般来说,一个plugin的设置方法如下:plugin的名称(去掉grunt-contrib-或grunt-前缀),选择使用此plugin的一个或多个对象(在这里可以给不同文件设置此plugin 的不同选项),一个选项object,以及plugin要作用的对象。现在,如果我们用命令行工具运行grunt htmlhint,该plugin就会检查我们在src里指定的HTML文件,验证其中有没有错误!但是每个小时都要手动运行几次这个任务,很快就让人觉得很繁琐了。
自动化任务运行
watch是一个特殊的任务,它可以在目标文件保存时自动触发一系列任务的运行。在grunt.initConfig里加入以下设置:
watch: {
html: {
files: ['index.html'],
tasks: ['htmlhint']
}
}
然后,在命令行工具中运行grunt watch命令。现在,你可以试试在index.html里加一行注释,保存文件。你会注意到,保存文件时会自动触发HTML的验证!这是对开发流程的一大优化:在你写代码时,watch任务就会默默同时为你验证代码,如果验证失败任务就会报告失败(它还会告诉你问题在哪)。
注意grunt watch任务会一直运行,直到命令行工具关闭,或手动停止(control+c在Mac中)。
保持JavaScript极简
让我们来写一个验证用户输入的名字的JavaScript文件。简便起见,我们这里只检查其中是否含有非字母的字符。我们的JavaScript会使用strict模式,这可以防止我们写可用但低质量的JavaScript。创建assets/js/base.js文件并在其中写上:
function Validator()
{
"use strict";
}
Validator.prototype.checkName = function(name)
{
"use strict";
return (/[^a-z]/i.test(name) === false);
};
window.addEventListener('load', function(){
"use strict";
document.getElementById('firstname').addEventListener('blur', function(){
var _this = this;
var validator = new Validator();
var validation = document.getElementById('namevalidation');
if (validator.checkName(_this.value) === true) {
validation.innerHTML = 'Looks good! :)';
validation.className = "validation yep";
_this.className = "yep";
}
else {
validation.innerHTML = 'Looks bad! :(';
validation.className = "validation nope";
_this.className = "nope";
}
});
});
让我们用UglifyJS来极简化这个源代码,在grunt.initConfig中加上以下设置:
uglify: {
build: {
files: {
'build/js/base.min.js': ['assets/js/base.js']
}
}
}
UglifyJS会替换所有的变量和函数名,剔除所有空白和注释,从而生成占据最小空间的JavaScript文件,对发布非常有用。同样地,我们需要设置一个watch任务来使用它,在watch的设置里加入以下代码:
watch: {
js: {
files: ['assets/js/base.js'],
tasks: ['uglify']
}
}
9
现在我们有了一个静态HTML页面,一个存放Sass和JavaScript源文件的assets文件夹,一个存放优化后的CSS和JavaScript的build文件夹,以及package.json文件和gruntfile.js文件。
至此你已经有了一个不错的基础来进一步探索Grunt。像之前提到的,一个非常活跃的开发者社区在为Grunt开发前端plugin。我建议你现在就到plugin library 去看看那300个以上的plugin。
4. 《我的时代你的时代》首播,王安宇饰演的Grunt人设如何
他饰演的这个人设还是非常不错的,很多观众对此都表示十分的赞美,希望他精彩的演出。
5. 《亲爱的》grunt入戏太深,真的改行成为电竞选手了吗
在这部电视剧当中,文苡帆这位男主角所担任的就是一位技术非常强大的职业选手,很多人都喜欢看这一部电视剧,很多人都被这位80后的小哥哥吸粉了,一些小姐姐们纷纷表示颜值很高,但是在电视剧拍完以后,有点受电视剧的影响,因为在拍戏的时候肯定是要去接触游戏俱乐部并且实际上手试试看的。
因为火了以后肯定是有更多电视剧前来合作的,但是他毅然而然的进入了电竞圈,希望他能够实现自己的梦想,有梦想的人都是值得我们去尊重的,说不定下一次的比赛就可以在实际直播中看到他,而不是在电视剧中看到他。
6. 如何停止grunt server
工具/原料
NodeJs
Windows系统
方法/步骤
要使用Grunt,第一件事是安装Node.js。(即使你没用过Node.js也不用担心——你只需安装它让Grunt能运行。)
安装了Node.js之后,用命令行工具执行以下命令:
$ npm install -g grunt-cli
要确认Grunt是否正确安装,可以使用以下命令:
$ grunt --version
下一步是在你的项目的根目录下创建package.json和gruntfile.js两个文件。
创建package.json文件
这个JSON文件让我们指定我们的开发环境所依赖的必须模块。有了它,项目的所有开发者都能保证安装上一致的必须模块,从而保证所有人拥有一样的开发环境。
在项目根目录下的pacakge.json文件中写上:
{
"name" : "SampleGrunt",
"version" : "0.1.0",
"author" : "Brandon Random",
"private" : true,
"devDependencies" : {
"grunt" : "~0.4.0"
}
}
然后在命令行工具运行:
$ npm install
该命令告诉npm 需要安装的必须模块,npm会安装它们,自动保存在项目根目录下一个叫做 node_moles 的文件夹里。
创建gruntfile.js文件
gruntfile.js 文件本质上就是一个wrapper函数,接受grunt作为参数:
mole.exports = function(grunt){
grunt.initConfig({
pkg: grunt.file.readJSON('package.json')
});
grunt.registerTask('default', []);
};
现在你已经可以在项目根目录下运行grunt命令行工具了。
$ grunt
> Task "default" not found. Use --force to continue.
这里我们只指定了Grunt作为必须模块,还没定义任何任务。接下来我们就要指定任务和必须模块。首先来看如何拓展package.json文件。
拓展package.json文件
使用Node.js最好的一点,就是它可以根据package.json文件的内容,一次性查找和安装多个package。要安装我们项目的所有必须任务,只须在package.json文件中加上以下内容:
{
"name" : "SampleGrunt",
"version" : "0.1.0",
"author" : "Mike Cunsolo",
"private" : true,
"devDependencies" : {
"grunt" : "~0.4.0",
"grunt-contrib-cssmin": "*",
"grunt-contrib-sass": "*",
"grunt-contrib-uglify": "*",
"grunt-contrib-watch": "*",
"grunt-cssc": "*",
"grunt-htmlhint": "*",
"matchdep": "*"
}
}
那么如何实现安装?你肯定已经猜到了:
$ npm install
使用Grunt载入任务
package安装好后,还必须被Grunt载入才能为我们所用。使用 matchdep,我们用一行代码就可以自动载入所有任务。这是开发流程的一大优化,因为现在我们只须把必须任务列表写在package.json一个文件里,便于管理。
在gruntfile.js里,grunt.initConfig之上,写上以下代码:
require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);
要是没有matchdep,我们就必须为每一个必须任务写一次grunt.loadNpmTasks(“grunt-task-name”); ,随着我们使用的任务的增加,这些载入任务的代码很快就会变得相当繁冗。在Grunt载入这些任务前,我们还可以指定设置选项。
现在我们需要创建我们的HTML文件(index.html):
Enter your first name
用HTMLHint验证HTML
在grunt.initConfig里加入下列设置代码:
htmlhint: {
build: {
options: {
'tag-pair': true,
'tagname-lowercase': true,
'attr-lowercase': true,
'attr-value-double-quotes': true,
'doctype-first': true,
'spec-char-escape': true,
'id-unique': true,
'head-script-disabled': true,
'style-disabled': true
},
src: ['index.html']
}
}
一般来说,一个plugin的设置方法如下:plugin的名称(去掉grunt-contrib-或grunt-前缀),选择使用此plugin的一个或多个对象(在这里可以给不同文件设置此plugin 的不同选项),一个选项object,以及plugin要作用的对象。现在,如果我们用命令行工具运行grunt htmlhint,该plugin就会检查我们在src里指定的HTML文件,验证其中有没有错误!但是每个小时都要手动运行几次这个任务,很快就让人觉得很繁琐了。
自动化任务运行
watch是一个特殊的任务,它可以在目标文件保存时自动触发一系列任务的运行。在grunt.initConfig里加入以下设置:
watch: {
html: {
files: ['index.html'],
tasks: ['htmlhint']
}
}
然后,在命令行工具中运行grunt watch命令。现在,你可以试试在index.html里加一行注释,保存文件。你会注意到,保存文件时会自动触发HTML的验证!这是对开发流程的一大优化:在你写代码时,watch任务就会默默同时为你验证代码,如果验证失败任务就会报告失败(它还会告诉你问题在哪)。
注意grunt watch任务会一直运行,直到命令行工具关闭,或手动停止(control+c在Mac中)。
保持JavaScript极简
让我们来写一个验证用户输入的名字的JavaScript文件。简便起见,我们这里只检查其中是否含有非字母的字符。我们的JavaScript会使用strict模式,这可以防止我们写可用但低质量的JavaScript。创建assets/js/base.js文件并在其中写上:
function Validator()
{
"use strict";
}
Validator.prototype.checkName = function(name)
{
"use strict";
return (/[^a-z]/i.test(name) === false);
};
window.addEventListener('load', function(){
"use strict";
document.getElementById('firstname').addEventListener('blur', function(){
var _this = this;
var validator = new Validator();
var validation = document.getElementById('namevalidation');
if (validator.checkName(_this.value) === true) {
validation.innerHTML = 'Looks good! :)';
validation.className = "validation yep";
_this.className = "yep";
}
else {
validation.innerHTML = 'Looks bad! :(';
validation.className = "validation nope";
_this.className = "nope";
}
});
});
让我们用UglifyJS来极简化这个源代码,在grunt.initConfig中加上以下设置:
uglify: {
build: {
files: {
'build/js/base.min.js': ['assets/js/base.js']
}
}
}
UglifyJS会替换所有的变量和函数名,剔除所有空白和注释,从而生成占据最小空间的JavaScript文件,对发布非常有用。同样地,我们需要设置一个watch任务来使用它,在watch的设置里加入以下代码:
watch: {
js: {
files: ['assets/js/base.js'],
tasks: ['uglify']
}
}
9
现在我们有了一个静态HTML页面,一个存放Sass和JavaScript源文件的assets文件夹,一个存放优化后的CSS和JavaScript的build文件夹,以及package.json文件和gruntfile.js文件。
至此你已经有了一个不错的基础来进一步探索Grunt。像之前提到的,一个非常活跃的开发者社区在为Grunt开发前端plugin。我建议你现在就到plugin library 去看看那300个以上的plugin。
7. 《亲爱的》grunt入戏太深,真的改行成为电竞选手了吗
并没有真的改行了吧,他只是有这方面的爱好。《亲爱的》已经播出半个月了,但热度仍在直接上升,没有倒下的态度。节目播出以来,每一位演员和每一个角色都受到了众多网友的喜爱。他们在剧中很可爱,而且都有神的帮助,因为有那么多网友被困其中不能自拔。我们都希望这部电影和电视连续剧没有结束,希望他们能永远活着。
当网民知道这件事时,他们都说这真的很疯狂,但也很高兴有一件他喜欢为之奋斗的事情。而且,他在这里用的名字是grunt。想都不想就演一出戏真的很难。我不希望他将来能取得好成绩,为国家争光。
8. grunt 压缩 合并 css 后 需要删除注释 与 合并同名 选择器 怎么配置 gruntfile.js
Grunt基于Node.js,其中 npm 是 Node.js 的包管理器,而Grunt和Grunt插件就通过 npm 安装并管理。
Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用。
安装Node.js:
去Node.js官网,点击INSTALL下载并安装,现在的Node.js会自动安装npm。
安装完成之后,打开命令行,进行后续的操作(开始->输入CMD 或 开始->所有程序 ->命令提示符)。
进入Node.js的安装目录(默认路径为"C:\Program Files\nodejs"):
cd \pro*\nod*
9. 网曝《亲爱的热爱的》韩商言的战队名另有含义,是什么含义呢
《亲爱的,热爱的》里面男主女主的爱情的确令人羡慕,两个人从一路跌跌撞撞到最后离不开彼此,其中也有很多甜蜜的暴击直中少女的心脏,搞网络安全的男主刚好遇见了编程大佬的女主,可谓天生一对,而剧中大家应该也都知道有很多战队,而且每个战队也都有自己的名字,那么这些战队的名字背后到底有什么深层的含义呢?
例如其中kk战队的选手们有一个叫令山的人,他在比赛中的名字是97,其实代表的是他的出生年份是97年,还有戴风的demo翻译成英文更有小样的意思,还有就是我们的韩商言男神又叫guan神,后来才知道那是因为他们都是打电竞的不过后来改成了打网络安全的,所以才会有抢名这个名字的存在。