一、认识webpack

webpack是一款模块打包加载工具。它能够将各种资源、JS、CSS、图片等作为模块打包加载。本人也是近期因工作需要才开始接触webpack,在下文中有误的地方还希望各位能够指出,本人也会积极改正。

二、安装webpack

这里安装webpack的前提是已经安装的node.js和npm。下面进行webpack的全局安装:

$ npm webpack install -g

三、相关配置

每个使用webpack的项目必须有一个webpack.config.js文件。先上代码。下面是我在本次项目中编写的webpack.config.js文件:

 var path = require('path')
var webpack = require('webpack')
var fs = require('fs');
var dir = './client/develop/view';
var readDir = fs.readdirSync(dir);
var entry = {
vendor: ['babel-polyfill','react','redux']
};
readDir.forEach(v => {
v = v.replace(/\.js$/, '');
entry[v] = dir + '/' + v;
}); module.exports = {
entry: entry,
output: {
path: path.join(__dirname, 'client', 'dist', 'js'),
filename: '[name].bundle.js',
publicPath: '/js/'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.bundle.js'),
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("production")
}
})
],
module: {
loaders: [
{
test: /\.js$/,
// loaders: ['babel?optional=runtime'],
loaders: ['babel?presets[]=es2015&presets[]=react'],
exclude: /node_modules/,
include: __dirname
}, {
test: /\.css$/,
loader: "style-loader!css-loader"
},
{
test:/\.json$/,
loader:'json'
},
// Optionally extract less files
// or any other compile-to-css language
{
test: /\.less$/,
loader: "style-loader!css-loader!less-loader"
}
]
}
}

由上面代码能够看出,webpack.config.js是有固定结构的,该结构主要体现在module.exports对象中:

1.输入接口

entry是页面入口文件配置,可以是字符串、对象、数组格式。下面分别对三种格式进行说明:

(1)字符串格式:当entry是字符串时,该字符串对应的模块会在webpack启动时加载。

(2)数组格式:该数组内所有模块都会在webpack启动时加载,数组的最后一个元素会作为输出。

(3)对象格式:此时会构建一个或多个bundle输出。在上面代码中entry是一个对象,启动webpack后,会在'__dirname/client/dist/js'路径下生成文件名为vendor和'

./client/develop/view'目录下所有文件的名称的bundle文件(太绕口了,原谅我高考语文差点不及格)。

2.输出接口

export是对应的输出配置。该对象有下面三个属性:

(1)path:文件输出路径。说明了文件输出的位置。上面代码中文件输出路径为'__dirname/client/dist/js'。

(2)filename:文件输出名称。代码中文件输出名称为'[name].bundle.js','.bundle.js'为文件名后缀,'[name]'为entry对象中读取的文件名。

(3)publicPath:表示资源发布后的前缀地址。

3.插件引入

在本项目中使用两个插件

(1)CommonsChunkPlugin插件:它用于提取多个入口文件的公共脚本部分,然后生成一个 common.js 来方便多页面之间进行复用。

(2)DefinePlugin插件:用于接收字符串插入到代码当中。

4.加载器配置

加载器配置是最为关键的一块。该部分针对不同的文件类型分别调用不同的加载器来加载文件。

(1)JS文件加载

 {
test: /\.js$/,
loaders: ['babel?presets[]=es2015&presets[]=react&presets[]=react-hmre&presets[]=stage-2'],
exclude: /node_modules/,
include: __dirname
}

代码中test为正则表达式,表示后缀为.js的文件使用loaders后面的加载器进行加载。

(2)CSS文件加载

{
test: /\.css$/,
loader: "style-loader!css-loader"
}

该部分表示加载后缀为.css的文件使用loader后面的加载器进行加载。

(3)json文件加载器

{
test: /\.json$/,
loader: 'json'
}

该部分表示json文件使用loader后面的加载器进行加载

(4)less文件加载器

{
test: /\.less$/,
loader: "style-loader!css-loader!less-loader"
}

该部分表示后缀为.less的文件使用loader后面的加载器进行加载

上面一共列举了四类文件加载。在webpack中还有很多文件加载器,在其他项目中如果需要加载其他类型文件,只需调用该类型文件加载器即可。

四、运行webpack

webpack.config.js编写完毕后,可以运行webpack来查看效果。运行步骤为:在webpack.config.js文件所在目录的DOS命令行直接输入webpack。下图是我运行该项目webpack后的效果图:

五、总结

从上面可以看到,webpack的配置文件可以按照上面的结构进行编写。然后根据项目需要,分别对输入接口、输出接口、插件引入、加载器配置这几个部分进行相应修改。其实,在项目中更多的是使用webpack+gulp的方式进行文件打包管理,现在本人也正在学习gulp,后续也会写一些gulp方面的东西。

说明一下,本人也是接触webpack没多久,还有很多地方没有学习到,也希望大神们多多赐教。

webpack入门学习的更多相关文章

  1. Webpack 入门学习

    1.什么是Webpack? Webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等 ...

  2. webpack入门学习手记(一)

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  3. webpack入门学习总结

    <h5概述</h5> webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分 ...

  4. webpack入门-个人学习资源收集

    本来是想自己写哈个人学习webpack心德的,不过网上现在已经有各种比较好的,详细的入门或者深入资源了. 所以我就简单总结了一下,我在入门webpack时看的一些博客和文档,以及顺道看到的一些觉得也应 ...

  5. webpack入门教程之Hello webpack(一)

    webpack入门教程系列为官网Tutorials的个人译文,旨在给予想要学习webpack的小伙伴一个另外的途径.如有不当之处,请大家指出. 看完入门教程系列后,你将会学习到如下内容: 1.如何安装 ...

  6. Webpack入门——使用Webpack打包Angular项目的一个例子

    2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...

  7. webpack初步学习

    https://segmentfault.com/a/1190000006178770 该篇文章足够webpack入门的学习了,对webpack有个初步的了解和认识.

  8. webpack—入门

    点击进入webpack官网.,开始教程时,建议先学习ES6语法,也请先观看本篇Windows符号介绍文章,当所有webpack内容学习完后,会有一个专门的介绍 webpack四个核心概念(从官网入门— ...

  9. scss入门学习(一)

    sass的文件后缀名 sass是目前流行的css预处理语言.sass有两种后缀文件,一种是.sass,不允许使用大括号和分号:另一种是.SCSS,允许使用大括号和分号,类似于我们平时写css的语法习惯 ...

随机推荐

  1. centos postfix 邮箱安装记录

    ---恢复内容开始--- #wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.9 ...

  2. Python,遍历目录下TXT

    import os #获取根目录,递归得到所以txt文件的路径 list_dirs = os.walk(os.curdir) txtfilenames=[] for root, dirs, files ...

  3. 《学习OpenCV》 第四章 习题六

    实现的是一个图像标签编辑器,其间遇到了些问题还未解决或者可能解决方法上不是最优,若你有更好的思路可以提供给我,大恩不言谢啦!!☆⌒(*^-゜)v. #include "stdafx.h&qu ...

  4. ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag

    在上一节我们创建了与Index动作方法对应的Index视图,那么Index动作方法该如何向Index视图传送数据呢?其中一个方法是使用ViewBag(视图包).让我们试试看. 在Index动作方法中添 ...

  5. loadView与viewDidLoad不同 && loadView学习总结

    loadView学习总结 UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访问.但没有调用loadView ...

  6. 转载:.NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  7. 一种计算e的方法

    原文地址:http://hankjin.blog.163.com/blog/static/3373193720108811316123/ 原理:平均e个(0,1)之间的随机数之和会大于1.原因:n个数 ...

  8. MySQL ubuntu启动

    service mysql start 启动 service mysql restart 重启 service mysql stop 停止 mysql -uroot -ppassword 登入mysq ...

  9. Unity 网络斗地主 牌的一些算法

    Unity 网络斗地主  牌的一些算法 在这儿说一下,我的项目是用svn的方式,上传在https://v2.svnspot.com/18666451713.doudizhu这个svn上,大家可以下载T ...

  10. Unity3d 读取网络xml

    Unity3d 读取网络xml Unity3d 读取网络xml,这个xml文件需要不包含BOM信息,可以用UltraEdit打开xml文件,并且另存为的时候,选择不包含BOM的utf-8格式存储!