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神,後來才知道那是因為他們都是打電競的不過後來改成了打網路安全的,所以才會有搶名這個名字的存在。