前一篇记录了Grunt的安装,这篇介绍下怎么使用Gruntjs来搭建一个前端项目,然后使用grunt合并,压缩JS文件。
大概有如下步骤
一、新建项目Bejs
源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会自动生成。
二、新建package.json
package.json放在根目录下,它包含了该项目的一些元信息,如项目名称、描述、版本号,依赖包等。它应该和源码一样被提交到svn或git。 现在的项目结构如下
package.json内容需符合JSON语法规范,如下
"name": "Bejs",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.0",
"grunt-contrib-jshint": "~0.1.1",
"grunt-contrib-uglify": "~0.1.2",
"grunt-contrib-concat": "~0.1.1"
}
}
devDependencies中的grunt在前一篇已经安装了,grunt-contrib-jshint/grunt-contrib-uglify/grunt-contrib-concat则没有安装。三个分别对于三个任务(task)
- grunt-contrib-jshint js语法检查
- grunt-contrib-uglify 压缩,采用UglifyJS
- grunt-contrib-concat 合并文件
此时,打开命令行工具进入到项目根目录,敲如下命令: npm install
再查看根目录,发现多了个node_modules目录,包含了四个子目录,见图
三、新建文件Gruntfile.js
Gruntfile.js也是放在项目根目录下,几乎所有的任务都定义在该文件中,它就是一个普通的js文件,里面可以写任意js代码而不仅局限于JSON。和package.json一样它也要和源码一样被提交到svn或git。
Gruntfile.js由以下内容组成
// Do grunt-related things in here
};
该示例完成以下任务
最终的Gruntfile.js如下
// 配置
grunt.initConfig({
pkg : grunt.file.readJSON('package.json'),
concat : {
domop : {
src: ['src/ajax.js', 'src/selector.js'],
dest: 'dest/domop.js'
}
},
uglify : {
options : {
banner : '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build : {
src : 'dest/domop.js',
dest : 'dest/domop.min.js'
}
}
});
// 载入concat和uglify插件,分别对于合并和压缩
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
// 注册任务
grunt.registerTask('default', ['concat', 'uglify']);
};
四、执行grunt任务
打开命令行,进入到项目根目录,敲 grunt
从打印信息看出成功的合并和压缩并生成了dest目录及期望的文件,这时的项目目录下多了dest,如下
ok,Gruntjs的入门就介绍完了,这里只是介绍了2个常见任务concat和uglify,jshint等没有介绍。Gruntfile.js里的代码也没有一一解读,感兴趣的同学可在gruntjs的官方文档找到。
相关:
Bejs
https://npmjs.org/doc/json.html
本文链接
浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异。因此,浏览器兼容成为前端开发人员的必备技能。如果有一份浏览器 Hack 手册,那查询起来就方便多了。这篇文章就向大家分享 Browserhacks 帮我们从网络上收集的各个浏览器特定的 CSS & JavaScript Hack,记得推荐和分享啊!
IE 选择器 Hack* html .selector {}
.suckyie6.selector {} /* .suckyie6 can be any unused class */
.selector, {}
*:first-child+html .selector {}
.selector, x:-IE7 {}
*+html .selector {}
html > body .selector {}
html > /**/ body .selector {}
head ~ /* */ body .selector {}
:root *> .selector {}
body:last-child .selector {}
body:nth-of-type(1) .selector {}
body:first-of-type .selector {}
.selector { _color: blue; }
.selector { -color: blue; }
.selector { color: blue !ie; }
/* string after ! can be anything */
! $ & * ( ) = % + @ , . / ` [ ] # ~ ? : < > | */
.selector { !color: blue; }
.selector { $color: blue; }
.selector { &color: blue; }
.selector { *color: blue; }
/* ... */
.selector { color: blue\0/; }
/* must go at the END of all rules */
.selector:nth-of-type(1n) { color: blue\9; }
.selector { color: blue\9; }
.selector { color/*\**/: blue\9; }
.selector { color/**/: blue; }
@media screen\9 {}
@media \0screen {}
@media screen and (min-resolution: +72dpi) {}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {}
@media \0screen\,screen\9 {}
@media screen\0 {}
@media screen and (min-width:0\0) {}
@media screen and (min-width: 400px) {}
(checkIE = document.createElement("b")).innerHTML = "<!--[if IE 6]><i></i><![endif]-->";
var isIE = checkIE.getElementsByTagName("i").length == 1;
(checkIE = document.createElement("b")).innerHTML = "<!--[if IE 7]><i></i><![endif]-->";
var isIE = checkIE.getElementsByTagName("i").length == 1;
navigator.appVersion.indexOf("MSIE 7.")!=-1
var isIE = '\v'=='v';
(checkIE = document.createElement("b")).innerHTML = "<!--[if IE 8]><i></i><![endif]-->";
var isIE = checkIE.getElementsByTagName("i").length == 1;
(checkIE = document.createElement("b")).innerHTML = "<!--[if IE 9]><i></i><![endif]-->";
var isIE = checkIE.getElementsByTagName("i").length == 1;
var isIE = eval("/*@cc_on!@*/false") && document.documentMode === 10;
var isIE = document.body.style.msTouchAction != undefined;
选择器 Hack
body:empty .selector {}
.selector, x:-moz-any-link {}
.selector, x:-moz-any-link; x:default {}
body:not(:-moz-handler-blocked) .selector {}
媒体查询 Hack
@media screen and (min-resolution: +72dpi) {}
@media screen and (-moz-images-in-menus:0) {}
@media screen and (min--moz-device-pixel-ratio:0) {}
JavaScript Hack
var isFF = !!navigator.userAgent.match(/firefox/i);
var isFF = Boolean(window.globalStorage);
var isFF = /a/[-1]=='a';
var isFF = (function x(){})[-5]=='x';
选择器 Hack
::made-up-pseudo-element, .selector {}
媒体查询 Hack
@media screen and (-webkit-min-device-pixel-ratio:0) {}
JavaScript Hack
var isChrome = Boolean(window.chrome);
Safari 浏览器
选择器 Hack
html[xmlns*=""] body:last-child .selector {}
html[xmlns*=""]:root .selector {}
*|html[xmlns*=""] .selector {}
::made-up-pseudo-element, .selector {}
媒体查询 Hack
@media screen and (-webkit-min-device-pixel-ratio:0) {}
JavaScript Hack
var isSafari = /a/.__proto__=='//';
Opera 浏览器
选择器 Hack
*|html[xmlns*=""] .selector {}
html:first-child .selector {}
电子商务是一个不断发展的行业,方便买卖双方。购物者可以在家里购买到自己需要的商品,而商家只需要管理一个网站,而不是一个完整的实体店。但是,当你发展你的网上商店时,其实是采用和设计一个实体店相同的方式,需要想想你的客户希望看到什么样的风格。这篇文章收集了20个简约风格的电子商务网站设计案例,希望能带给你灵感。
- 20个优秀的国外电子商务网站设计案例
- 分享50个优秀的电子商务网站设计案例
- 60佳优秀的国外电子商务网站设计案例
- 25个国外优秀的电子商务网站设计案例
- 10套精美的免费网站后台管理系统模板
01. Shoe Guru
02. The Few Gallery
03. My Own Bike
04. Tatchies
05. Noon Style
06. Spyder
07. Hunter’s Wine Shop
08. Hard Graft
09. Soho Fixed
10. Habitat Footwear
11. Von Dutch
12. Wire & Twine
13. Storyville Coffee
14. Famous 4th Street Cookie
15. Converse
16. Winestore
17. Tinkering Monkey
18. Blik
19. Narwhal Co.
20. Inkefx
您可能感兴趣的相关文章
- 分享35个非常漂亮的单页网站设计案例
- 10套精美的免费网站后台管理系统模板
- 25个国外优秀的餐饮网站设计案例欣赏
- 25个国外优秀的电子商务网站设计案例
- 12个优秀的 HTML5 网站设计案例欣赏
本文链接