标签:
1.前端工程化
最近几年,前端(自动化)构建工具大受欢迎。对于初学者,首先应该了解为什么要用这些工具,或者说,使用这些工具的目的(作用)是什么,再或者,这些工具能让我们干一些什么事情?
笔者以为,既然是“工具”,必定是在一定程度上解放我们的双手的。
这些工具的产生背景是,当下的前端项目越来越复杂,需要管理的资源越来越多。对于小项目,自然不需要这些工具。这些工具一般能完成前端开发流程中的重复工作的一项或几项。工程化的含义有系统,完整性的意思。借助这些工具,我们完成前端工程化,让流程更规范、标准。
2.常见的前端工程化工具
不了解一个行业的职业要求,最好的办法是看职位招聘。近年来,前端这块的招聘的要求有了对前端工程化工具掌握的要求。
通过搜寻,最常出现的工具是:Grunt、gulp、webpack、yeoman、bower。其中:
yeoman是脚手架工具:是用来生成项目的
bower是包管理工具
Grunt、gulp、webpack的作用类似,压缩代码,打包资源等。
无论哪种前端构建工具,都是通过npm包管理的。如果本机上安装有nodejs,就有了npm包。客通过查看npm的版本,检查是否安装有npm
npm -version
在已经安装npm的系统中,安装各种工具非常简单:npm install命令即可安装想要的工具。
3.webpack
webpack顾名思义,肯定有"打包"的功能。除此之外,它还将所有的静态资源视为模块。css是模块,图片也是模块。这也符合nodejs的理念。
由于 webpack跟react项目结合的很好,笔者第一个接触的前端构建工具就是这个。webpack是基于配置的,对使用者来讲,我们需要掌握这些配置。
1)新建项目
新建的项目,命令模式下切换到项目根路径,用npm init命令生成package.json。一路回车(熟了可以填写内容),这时再次查看项目,项目根目录下多了个package.json的文件。这个文件里面有项目的各种信息。
2)安装webpack
局部安装webpack,在项目根路径,使用如下的命令:
$ npm install webpack --save-dev
解释下:--save-dev命令会把webpack的信息加入package.json中,现在多了这样一项:
"devDependencies": { "webpack": "^1.13.2"}
3)项目实例
完成上面的一步后,还需要添加webpack的配置文件。这个文件不像package.json文件自动生成那样,需要手动添加。在编辑器中打开项目,在项目根路径下添加webpack的配置文件webpack.config.js 。
我们以后以后执行webpack,这个文件就是入口,webpack会查找这个配置文件的去完成各项任务。
以1个项目说明吧,i)先建立了css、images、js文件夹(里面各有一个相应的文件)及index.html。ii)然后生成package.json,iii)安装webpack,添加配置文件webpack.config.js。至此,项目的目录结构如下:
展开如下:
iiii)编写配置文件webpack.config.js:
var path = require("path");
var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var HtmlWebpackPlugin = require(‘ ‘);
module.exports = {
// @ ../不行
entry: {cou:‘./js/cou.js‘},
//entry:[‘./js/cou.js‘],
output: {
path: path.join(__dirname, ‘./build‘),
filename: ‘js/[name].js‘
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: ‘babel-loader‘
},
{
test: /\.css$/,
//loader:‘style!css‘,
loader: ExtractTextPlugin.extract("style-loader", "css-loader")
},
{
test: /\.less$/,
//配置less的抽取器、加载器。中间!有必要解释一下,
//根据从右到左的顺序依次调用less、css加载器,前一个的输出是后一个的输入
//你也可以开发自己的loader哟。有关loader的写法可自行谷歌之。
//loader: ExtractTextPlugin.extract("css-loader","less-loader")出错
loader: ExtractTextPlugin.extract(‘css!less‘)
},
{
test: /\.(png|jpg|gif)$/,
loader: ‘url?limit=40000&name=images/[name].[ext]‘
},
//对应HtmlWebpackPlugintemplate
//html模板加载器,可以处理引用的静态资源,默认配置参数attrs=img:src,处理图片的src引用的资源
//比如你配置,attrs=img:src img:data-src就可以一并处理data-src引用的资源了,就像下面这样
{test: /\.html$/,
loader: ‘html?minimize=true‘}
]
},
resolve: {
root: ‘E:/github/flux-example/src‘, //绝对路径
extensions: [‘‘, ‘.webpack.js‘, ‘.coffee‘, ‘.json‘, ‘.js‘, ‘.jsx‘],
alias: {
//设置别名
"coupon":"./../css/cou.css",
"bless":"./../less/b.less"
}
},
plugins: [
new ExtractTextPlugin("css/[name].css"),
//每次都会覆盖
new HtmlWebpackPlugin( {
//html输出的文件名
filename: ‘index.html‘,
//压缩的html
template: ‘./index.html‘,
minify:{ //压缩HTML文件
removeComments:true, //移除HTML中的注释
collapseWhitespace:false //删除空白符与换行符
}
//new webpack.HotModuleReplacementPlugin() //热加载
})
],
};
以上的配置文件,实现了开发项目中的文件压缩,包括:html、css、js。输出至dist目录,保持项目结构保持不变。最终build目录里的东西就是我们最重要发布的。
有了上面的噢诶之文件,还不能执行webpack的命令。因为配置文件里引入的loader,plugin都还没安装。
iiiii)安装所需的loader,plugin
依然是在命令模式下,切换到项目根路径,安装的命令是:npm install [loader] [plugin] --save-dev。比如安装babel-loader,就可以这样
npm install babel-loader --save-dev。
还可以一次安装多个loader。本项目的loader安装可以简化如下:
npm install babel-loader style-loader css-loader less-loader html-loader --save-dev。
接下来安装两个所需的插件,一样的命令:
npm install extract-text-webpack-plugin --save-dev
npm install html-webpack-plugin --save-dev
第一个插件的作用是单独打包css,而不是把打包好的css嵌入到js里,虽然这是webpack模块化的优势,将css也作为模块,但有些情况我们依然希望将css作为一个单独的文件输出。注意,很多个css,也最终合并到同一个css里面。并在输出的html文件中引入。
css需要在入口js中引入,要不然不会压缩的。
4)配置文件详解
webpack的难点就在配置文件webpack.config.js 里了。刚开始学的时候,很是迷茫。就以上面例子的配置为例,强行解释下:
前面4行定义变量,引入所需的插件。其中,path和webpck在webpack安装好之后就有的,不需要额外安装。
后面的两个插件,分别是独立压缩css和html。如果不需要对css单独压缩,可以不引入第1个。事实上,本例path变量并没有用到。
引入之后在plugins数组里有用到。用这个生成对象。
webpack的入口文件是1个js。entry后面可以跟数组或对象表示,可以有多个。
__dirname是nodeJs里的概念,它表示当前执行命令的完整目录。
module项是最重要的配置,loader和plugin都在这里配置。指明了对资源如何处理。
在本例的cou.js里,这么引入的css模块。
这个是通过别名的方式引入。回到配置文件,我们在module项的 resolve里指定了别名。
alias: {
//设置别名
"coupon":"./../css/cou.css",
"bless":"./../less/b.less"
}
最后解释下,同目录下,要用“./”引入。这根我们写html引入资源的方式不一样。
5)执行命令
最后,在命令模式下,在项目根路径执行webpack -p。生成build文件夹,里面的代码就是压缩过的,less文件编译并合并到css文件里面。
build展开:
至此,项目已搭建完毕。每次修改源文件后,也只是执行webpack -p命令生成同步的build文件。
webpack学习
标签:
原文地址:http://www.cnblogs.com/xiaochongchong/p/5938753.html