码迷,mamicode.com
首页 > Web开发 > 详细

webpack学习

时间:2016-10-08 16:30:26      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

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模块。
require("coupon");
这个是通过别名的方式引入。回到配置文件,我们在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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!