时下很火的react项目多用到webpack+ES6,本文只实践webpack的打包功能,不涉及react.
1、新建项目
新建的项目,命令模式下切换到项目根路径,用npm init命令生成package.json。一路回车(熟了可以填写内容),这时再次查看项目,项目根目录下多了个package.json的文件。这个文件里面有项目的各种信息。
2、安装webpack
先全局安装webpack,命令:
$ npm install webpack -g
局部安装webpack,在项目根路径,使用如下的命令:
$ npm install webpack --save-dev
解释下:--save-dev命令会将安装的信息加入package.json中,现在多了这样一项:
"devDependencies": { "webpack": "^1.13.2"}
如果用了 --save命令,则会加入"dependencies"项。

全局,局部安装都不可缺,如果不局部安装webpack,在执行webpack命令的时候会报如下错误:Cannot find module 'webpack'

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)$/,
          //name后不写../会在css引入图片的的时候路径出错
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 里了。刚开始学的时候,很是迷茫。就以上面例子的配置为例,强行解释下:
1)前面4行定义变量,引入所需的插件。其中,path和webpck在webpack安装好之后就有的,不需要额外安装。
2)后面的两个插件,分别是独立压缩css和html。如果不需要对css单独压缩,可以不引入第1个。事实上,本例path变量并没有用到。引入之后在plugins数组里有用到。用这个生成对象。
3)webpack的入口文件是1个js。entry后面可以跟数组或对象表示,可以有多个。
4)__dirname是NodeJs里的概念,是NodeJs的全局对象,它表示当前执行脚本所在的完整目录;'./'也是NodeJs里的概念,./ 为当前目录。引入同级文件用这个。
5)module项是最重要的配置,loader和plugin都在这里配置。指明了对资源如何处理。
6)在本例的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学习(二)的更多相关文章

  1. 深入学习webpack(二)

    深入学习webpack(二) 在深入学习webpack(一)中,我通过一个例子介绍了webpack的基本使用方法,下面将更为系统的学习webpack的基本概念,对于一门技术的掌握我认为系统化还是很重要 ...

  2. webpack学习笔记(二)-- 初学者常见问题及解决方法

    这篇文章是webpack学习第二篇,主要罗列了本人在实际操作中遇到的一些问题及其解决方法,仅供参考,欢迎提出不同意见. 注:本文假设读者已有webpack方面相关知识,故文中涉及到的专有名词不做另外解 ...

  3. 前端小白webpack学习(二)

    前一篇写了自我总结的webpack定义:为JavaScript服务的静态模块打包器 和几大基本概念 entry.output.plugins.loaders等.指路前端小白webpack学习(一) 下 ...

  4. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件

    一 .webpack学习环境准备: 1:window系统 2:安装node.js  官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...

  5. webpack学习(三)

    前篇:webpack学习(二) jquery不需要在项目中自己下载,而是作为一个模块引入.jquery的存放路径是在 node_modules目录下.1.首先给项目安装jquery,npm insta ...

  6. 前端小白webpack学习(一)

    俗话说得好,好记性不如烂笔头. 之前就在学习中看过webpack的教程,然而一段时间没用,火速的忘光了.写这篇博文,做个总结,也让自己以后有个地方回顾. 看webpack之前,我先去看了一下官方文档, ...

  7. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  8. 【原】webpack学习笔记

    之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...

  9. webpack学习(入门基础)

    webpack的学习webpack是什么?1:加载模块(将JS.sass/less.图片等作为模块来处理使用) 2:进行打包 webpack的优势?1:webpack以commonJS(JS的规范)的 ...

  10. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

随机推荐

  1. sgu 194 无源汇有上下界的最大流(最大流模板dinic加优化)

    模板类型的题具体参考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 参考博客:http://blog.csdn.ne ...

  2. sql server使用杂记(二)

    存储过程CREATE PROCEDURE [dbo].[getprofitandloss]@agentNo varchar(10),@o0 varchar(30),@source varchar(30 ...

  3. RDS for MySQL Online DDL 使用

    https://help.aliyun.com/knowledge_detail/41733.html?spm=5176.7841698.2.17.u67H3h

  4. Python开发工具安装

    v阅读目录 v写在前面 v基本概念 vWindows搭建python开发环境 v从Hello World开始 v博客总结 v博客前言 从大学开始玩python到现在参加工作,已经有5年了,现在的公司是 ...

  5. ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient

    简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方: 使用长连接: sanboxserver是无用的,调试时直接用"gateway.push.apple.com" ...

  6. Python图像处理库PIL中图像格式转换(一)

    在数字图像处理中,针对不同的图像格式有其特定的处理算法. 所以,在做图像处理之前,我们须要考虑清楚自己要基于哪种格式的图像进行算法设计及事实上现.本文基于这个需求.使用python中的图像处理库PIL ...

  7. SQL LEN() 函数 ,case when,聚合函数的使用方法

    SELECT aa.[User_Id],cc.[User_Name],dd.Name AS DepName,aa.Module_Id,aa.Module_Name, SUM(CASE aa.Opera ...

  8. CodeForces 444C. DZY Loves Physics(枚举+水题)

    转载请注明出处:http://blog.csdn.net/u012860063/article/details/37509207 题目链接:http://codeforces.com/contest/ ...

  9. Android 下使用opencv

    两种方式: 1.java API 2.Native/C++ 方式,OpenCV.mk中默认使用动态库的方式链接opencv,设置OPENCV_LIB_TYPE:=STATIC 以静态库方式调用 htt ...

  10. 浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

    本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linu ...