搭建自己的Webpack项目:入门

转自:http://www.tuicool.com/articles/YFZRniq

作为当下最流行的前端打包工具,webpack有自己无与伦比的优势和功能特性,使用webpack打包自己的项目能够大大地提高我们的开发效率。小编整理了一下webpack在项目中的最佳实战分享给大家。

一、什么是webpack

随着网页内容的越来越丰富,在我们的网页上我们经常要用到很多的脚本文件,比如幻灯模块的脚本、列表模块的脚本和搜索模块的脚本等等。如果不对这些文件进行统一的打包,整个页面就会非常的凌乱。

于是,webpack就诞生了,我们可以把它想象成一台洗衣机+烘干机+叠衣机(据说岛国已经发明类似的机器人了),我们可以把杂七杂八的衣服、裤子、袜子等等都丢进去,然后它就会帮我们洗干净、烘干、叠整齐了,一系列工作全自动完成,不需要我们亲自动手,怎么样,是不是很心动。

借用webpack官网的一张图来解释一下webpack的工作原理。左边就是我们杂乱的页面资源,有脚本文件、样式文件、图片文件等等,各种文件之间互相引用。经过webpack的打包整理,生成静态文件。

webpack的工作方式是:通过一个配置文件找到入口文件,从这个入口文件找到你项目依赖的所有资源文件,使用对应的资源加载器(loaders)来处理这些资源文件,最后打包成静态文件。

二、安装webpack

使用webpack之前需要安装webpack,在这里我们需要在两个地方安装:全局目录和项目目录,在项目目录下执行以下命令:

//全局安装的作用是直接在命令行中使用
npm install -g webpack
//安装到项目目录,使用webpack的功能
npm install --save-dev webpack

三、使用webpack

在开始上手项目之前首先来搭建我们的目录结构。

目录结构说明

我们可以把项目目录搭建成如下,当然只是给大家做一个参考而已:

-- package.json
-- webpack.config.js
-- public/
 -- images/
 -- javascript/
 -- stylesheet/
-- view/
-- build/

package.json使用 npm init 命令可以自动生成,在这里不过多的阐述;build目录主要是webpack构建的产物,自动生成;这里的核心文件就是我们的webpack.config.js文件,需要自己手动编写。

webpack配置文件

webpack.config.js 配置文件通过exports导出一个对象,这个对象中有三个模块比较重要:entry、output和module,具体如下:

varwebpack =require(‘webpack‘);
varpath =require(‘path‘)
module.exports = {
entry: {
index:‘./public/javascript/index.js‘
 },
output: {
path: path.resolve(__dirname,‘build‘),
filename:‘[name].bundle.js‘,
publicPath:‘./build/‘
 },
module: {
loaders: []
 },
plugins:{}
}

entry属性

entry属性是页面的主入口,所有页面的文件都在这个入口文件中进行引用。

当然,一个项目肯定有不止一个页面,需要多个入口,entry属性可以这样配置:

entry: {
index:‘./public/javascript/index.js‘,
list:‘./public/javascript/list.js‘,
//...多个页面的入口
},

output属性

在webpack打包之后,生成的js文件、css文件、图片文件等等就会放到output属性所指定的文件目录下。

path属性就是所在文件夹的路径,需要使用绝对路径,这里用path的resolve方法进行解析;filename属性指定了输出的文件名,[name]表示入口的属性名叫什么就输出对应的文件,比如这里的index输入的文件名就是index.bundle.js。

publicPath是以http方式请求的静态资源的路径,webpack-dev-server(webpack的一个插件)会根据你请求的url来匹配这个publicPath下的文件。

module属性

module属性主要存放解析资源文件的各个加载器,每一个对象表示了一个加载器。

test属性表示正则匹配,用来匹配文件的后缀名;loader属性表示如果文件相匹配,则调用对应的加载器来解析文件。比如样式加载器有css-loader、sass-loader。

加载器的后缀都是 -loader ,在loader属性中配置加载器不用写后缀,配置不同的加载器需要使用 ! 分隔并串联起来。

plugins属性

plugins属性是用来放webpack的插件,这个属性下面会用到

编写入口文件

在/public/javascript/目录下,编写我们的入口文件index.js,我们的入口文件非常简单,就在页面上打印一句话:

/public/javascript/index.js
document.write(‘webpack works‘)
document.write(require(‘./module.js‘))

还有我们的模块文件:

/public/javascript/module.js
module.exports=‘It works from module.js.‘

这样一个简单的webpack项目就完成了,通过在项目根目录使用webpack命令,在build文件中生成index.bundle.js文件就是我们的构建产物,在页面上直接引用这个js就能看到效果了

给页面点“颜色”看看

在页面上我们肯定会用到很多的样式文件,那么怎么在页面上使用呢?首先需要有对应的加载器,这里我们就要用到样式加载器。

首先安装我们的加载器:

npm install css-loader style-loader sass-loader --save-dev

然后改写配置文件中的加载器模块:

module: {
loaders: [
 { test:/\.css$/,loader:‘style!css‘},
 {test:/\.scss$/,loader:"style!css!sass"}
 ]
}

css-loader会遍历css文件,找到所有的url(…)并且处理。style-loader会把所有的样式插入到你页面的一个style标签中。

接下来就可以编写我们的样式文件了:

/stylesheet/style.css
body{background:#f5f5f5}

在index.js中我们添加对样式文件的引用:

require(‘../stylesheet/style.css‘);

在根目录我们再次执行webpack命令,再次生成构建的js文件就能看到页面上有颜色了。

提取公共的脚本并压缩

有时候多个公共脚本中有公用的部分,如果多写就显得有点多余,我们可以利用webpack的提取公共部分的插件来帮助我们提取。

在plugins属性中添加如下代码:

plugins: [
//压缩代码
newwebpack.optimize.UglifyJsPlugin(),
//提取公共部分
newwebpack.optimize.CommonsChunkPlugin(‘common.js‘)
]

再次执行webpack命令,我们在build文件夹里看到多出了一个common.js文件,这个就是提取出的公共部分。

独立出样式文件

通过 style 标签引入样式可能会让页面的代码看起来非常的庞大非常的凌乱,有时候我们需要将所有的样式导出到一个独立的样式文件,然后通过 link 标签引入样式文件。

这时候我们就需要用新的插件。通过 npm install 命令安装extract-text-webpack-plugin插件。

npm install extract-text-webpack-plugin --save-dev

安装完插件我们就需要在 webpack.config.js 文件中进行配置了。

varExtractTextPlugin =require("extract-text-webpack-plugin");
module.exports = {
// ...省略部分代码
module: {
loaders: [
// ...省略部分代码
 {test:/\.css$/,loader: ExtractTextPlugin.extract("style-loader","css-loader")}
 ]
 },
plugins: [
newwebpack.optimize.CommonsChunkPlugin(‘common.js‘),
newExtractTextPlugin("[name].css")
 ]
}

我们再使用webpack命令打包一下,看到 build 文件夹中看到多了一个index.css文件,就是插件提取出来的所有页面样式,都在一个文件中。

使用高逼格的ES6

ES6简洁的语法糖、性能的提升都让开发者对其深深的“迷恋”,下面来让我们的项目也来支持ES6的语法。

要想支持ES6首先要安装对应的解码器,es6的解码器就是babel,首先安装 babel-loader :

npm install babel-loader --save-dev

然后改写配置文件:

loaders: [
// ...省略部分代码
 { test:/\.js[x]?$/,loader:‘babel‘}
]

配置完成后我们就可以在js中尽情地使用es6的语法糖了。

四、总结

在这里我们编写了webpack的配置文件,对配置文件的属性进行了详细地说明,也添加了webpack的几个插件。但是还是欠缺以下几点:

  • 没有图片加载器
  • 没有构建本地服务器,没有热加载
  • 没有引导命令执行

本文所涉及到的代码都在 我的github仓库 ,需要的读者可以去fork,喜欢的给个赞啊亲。希望在后续的文章中对代码进行优化,添加更多的插件来丰富功能。

时间: 2024-10-25 06:27:25

搭建自己的Webpack项目:入门的相关文章

【原创】从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(二)

导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(未完待续)(四)Electron配置润色(未完待续)(五)预加载及自动更新(未完待续)(六)构建.发布整个项目(包括client和web)(未完待续) 摘要:上篇文章说到了如何新建工程,并启动一个最简单的Electron应用.“跑起来”了Electron,那就接着把Vue“跑起来”吧.有一点需要说明的是,webpack是贯穿这个系列始终的,我也是

【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新

导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更新(六)构建.发布整个项目(包括client和web)(未完待续) 摘要:到目前为止,我们的项目已经具备了PC客户端该有的一些基础功能和调试环境,但是总感觉缺了灵魂,那就是结合实际项目.实际业务的细节处理,缺着吧...这篇文章就介绍一下预加载和自动更新,文字功底有限,如有介绍的不清楚的地方,欢迎留言

GEF(Graphical Editor Framework) Eclipse项目入门系列(2)---Draw2D开发环境的搭建

GEF(Graphical Editor Framework) Eclipse项目入门系列(1)---概述中,我们已经提到了Draw2D框架是GEF框架的重要组成部分.那么Draw2D的环境如何搭建起来呢?其实很简单,去Eclipse的官方网站下载一个Eclipse的开发环境(这一部门我就不再赘述,网上的资料很多).笔者本人的电脑上装的是Indigo,所以笔者将会以Eclipse Indigo为例子给大家演示Draw2D开发环境的搭建.具体情况,请见下面的步骤. (1) 打开Indigo Ecl

vue+webpack项目结构介绍

对vue已经有了一定的了解,所以希望可以在github上找到一些项目实践,但是无奈不知道vue的整体架构是如何的,往往不知道该如何着手看,所以这里在网上找了相关的文章作为参考,对结构有一个大致的了解.参考文章如下: 用vue+webpack搭建的前端项目结构 vue+webpack项目实践 这里插一句话,搜索谷歌做的确实好,支持原创,搜索精准,不知道比度娘高到哪里去~

webpack入坑之旅(三)webpack.config入门

这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不是开始的开始 webpack入坑之旅(二)loader入门 webpack入坑之旅(三)webpack.config入门 webpack入坑之旅(四)扬帆起航 webpack入坑之旅(五)加载vue单文件组件 webpack入坑之旅(六)配合vue-router实现SPA 在上面我们已经尝试过了两种

NET Core 环境搭建和命令行CLI入门

NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开发环境,也可能用Linux/Mac,但是所有的dotnet CLI命令都是跨平台的,我们在windows/Linux/mac平台上开发跨平台的应用. 安装.NET Core .NET

GEF(Graphical Editor Framework) Eclipse项目入门系列(3)---Draw2D例子演示

在"GEF(Graphical Editor Framework) Eclipse项目入门系列(2)---Draw2D开发环境的搭建"一文中,我给大家介绍了Draw2D的开发环境的搭建.下一步,根据软件行业的惯例,需要展示一个例子,这样大家才更有兴趣去学习和探索这门技术.好了,废话少说,作者就借花献佛,用Dan Rubel,Jaimen Wren和Eric Clayberg的一个例子Draw2D的例子和大家分享一下.这个例子包括两个类,GenealogyView和FigureMover

NET Core 环境搭建和命令行CLI入门[转]

NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19      阅读:258      评论:0      收藏:0      [点我收藏+] NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开

Webpack简易入门教程

<!-- 其实网上关于webpack的教程已经很多了,但是本人在学习过程中发现很多教程有错误,或者写的很不全面,结果做的过程出现各种各样的问题,对新手不但不友好还会让人浪费很多不必要的时间.所以决定自己做个简易教程,这个教程也没有写太深入,面向的是纯新手,但按这个教程大家能快速搭建自己的webpack,方便大家为后面的学习做准备 --> github地址   https://github.com/Skura23/simple-webpack-test/tree/master 项目结构 --yo