时下很火的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. Pycharm 的基本操作

    下载:https://www.jetbrains.com/pycharm/ 安装:随意安装在那个目录都可以 注册:可以采用 激活码 或者激活服务器,并对应在选项下面填入激活码或者激活服务器URL即可. ...

  2. 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

    题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件:  1.P,Q是正整 ...

  3. linux系统读写缓存

    1.  操作系统缓存 在linux世界里,一切可读写设备都可看作是文件.文件cache设计的好坏直接影响着文件系统和磁盘的性能.最直观的是使用free命令看到的cached列. 这里面的cached列 ...

  4. [Tool] Open Multiple Terminal Tabs on npm Start with ttab and npm-run-all

    Often times when developing web applications, you need to open multiple tabs to run different script ...

  5. Oracle 自己主动内存管理 SGA、PGA 具体解释

    ASMM自己主动共享内存管理: 自己主动依据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME          ...

  6. 解决Android 应用方法数不能超过65K的问题

    Conversion to Dalvik format failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536 假设你的应用出 ...

  7. 一个伟大的发现,装X一下。笔记本win7系统64位机器执行unity 时,屏幕模糊解决的方法

    笔者笔记本win7系统64位机器执行unity 时.往往切换时unity界面屏幕模糊,后来发现此时须要下载DirectXRuntimes201006x64,安装就可以.

  8. QT 4.53 for VS2005 编译包

    最近学QT,装了QT5,结果打开下载的项目(特别是那些书的源代码)有很多兼容性问题.于是又下载4.83,都是4版本系列的,应该会好很多吧,但居然也是这样.于是看了一下时间,觉得4.53于2009年底发 ...

  9. bzoj 4025 二分图 分治+并查集/LCT

    bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不 ...

  10. mybatis中if标签判断字符串相等问题

    mybatis 映射文件中,if标签判断字符串sfyx变量是否是字符串Y的时候,发现并不管用: <if test="sfyx=='Y' "> and 1=1 </ ...