Webpack基本使用
webPack作为目前非常受欢迎的前端构建工具,相比于gulp和require构建工具自然有他存在的优势
1.webpack安装
1.首先确保你已经正确安装了nodejs环境。然后可以全局方式安装webpack:
$ npm install -g webpack
我们可以检查一下webpack
版本
$ webpack -v
这样就完成了对全局的安装
2.接下来我们可以在根目录下创建一个index.html
并引入一个app.js
接着可以在根目录下的js文件夹下创建part-one.js和part-two.js以及我们的entry.js
其中entry.js里我们引入其他两个js
文件
require('./part-one.js')
require('./part-two.js')
当然这个时候如果我们引入entry.js
是没有用的 require
这种写法是类似nodejs
里服务端里的写法
我们终端运行
$ webpack js/entry.js app.js
这里的
app.js
就相当于我们的入口文件
这个时候我们在index.html
里引入我们的app.js
就可以成功执行到js文件夹下的part-one.js
和part-two.js
里的业务逻辑了
和npm的package.json
composer的composer.json
bower的bower.json
一样
webpack也有自己的相应的配置文件 执行:
$ touch webpack.config.js
2.webpack配置使用
1.在webpack配置文件里进行相应的配置
这是一个简单的配置:
module.exports = {
devtool: "sourcemap",
entry: "./js/entry.js",
output: {
filename: "app.js"
}
}
- sourcemap 指定了生成文件间的对应关系
- entry.js 指明了入口文件
- app.js 指明了最后打包生成的文件
回到我们的命令行我们就可以直接执行
$ webpack
这样就生成了我们需要的app.js文件 当然还有我们的map
文件 在这里指明了文件之间的映射关系
当然这个时候我们需要更多的业务更多的需求 如我们需要引入jquery
这样的库 其实这时候也和gulp
差不多
我们在命令行中执行:
$ npm init
来生成我们的package.json
接下来我们开始引入jquery
命令行中执行
$ npm install jquery --save-dev
接下来我们就可以在我们的js文件里使用jquery
了
var $ = require('jquery');
$("p").css("background-color","yellow");
2.webpack Loader机制
1.和其他构件工具一样webpack
也可以将我们的静态文件进行打包 而有所不同的是
webpack
采用loader机制将静态文件打包到一个js文件再通过不同loader
进行加载使用
这样的话我们在项目里只需要加载一个js文件就可以达到应用的目的了
2.下面开始下载我们所需的loader
首先我们可以下载我们对样式处理的loader
$ npm install css-loader style-loader --save-dev
在我们先前的配置文件webpack.config.json
里我们就需要声明loader
对应的处理
module: {//在配置文件里添加JSON loader
loaders: [
{
test: /\.css$/,
loader: "style!css"
}
]
},
配置里其实也就是通过正则表达式来匹配
.css
的文件 并且用css loader
和style loader
来进行处理
当然我们这时需要在入口文件entry.js
里包含我们的css
文件,
假使我们在根目录先的css
文件夹创建了一个style.css
,
我们需要在entry.js
文件里包含进这个css文件
require("../css/style.css")
来到命令行执行:
$ webpack
我们就会看到style.css
里的样式已经成功应用到我们的页面上了
3.将js
交给我们的babel
来进行处理
下载相关的loader
:
$ npm install babel-core babel-loader babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-0 babel-runtime --save-dev
下载完成之后在webpack.config.json
里进行配置来进行babel
编译
babel: {
presets: ['es2015','stage-0'],
plugins: ['transform-runtime']
}
接着就是添加对js
文件的loader
module: {//在配置文件里添加JSON loader
loaders: [
{
test: /\.css$/,
loader: "style!css"
},
{
test: /\.js$/,
loader:"babel",
//忽略掉node_modules
exclude: /node_modules/
},
{
test:/\.vue$/,
loader:"vue",
}
]
},
在这里也给出了对vue文件的loader处理 因为接下来我们还是要借助这个来进行vueJs的组件化开发
这样一来我们就可以在我们的js
文件里使用babel
语法
同样的我们也是在entry.js
里去引入我们的jquery
这时我们就可以通过import
进来 这在vueJs组件化开发时也是很常见的
import $ from 'jquery'
//如果你要引入Vue的话
import Vue from 'vue';
3.webpack 进行Vue的组件化开发
1.下载相关的package
$ npm install vue vue-loader vue-html-loader vue-style-loader --save-dev
安装完毕后 我们去配置我们的loader
(这在之前已经给出了)
{
test:/\.vue$/,
loader:"vue",
}
2.创建我们的vue组件
在根目录的js/components文件夹下创建hheading.vue
具体内容:
<template>
<div>
{{ message }}
</div>
</template>
<script>
export default{
data(){
return{
message:'hello vueJs'
}
},
}
</script>
写完后我们还需要在之前的入口文件entry.js
里包含进来这个vue
组件
import Heading from "./components/heading.vue"
//初始化一个vue 需要在视图文件里指定我们的app
new Vue({
el:'#app',
components:{Heading}
/*
* 当然我们也可以在初始化之前这样注册
* Vue.component('Heading',require('./components/heading.vue'))
*/
})
这时在视图里我们就可以指定我们的组件了:
<div id="app">
<Heading></Heading>
</div>
命令行再次执行
$ webpack
当然我们的vue
由于是通过npm
安装的 我们他会给出一个错误就是Failed to mount component
如果我们需要使用常规模式 这需要我们通过一个script标签进行引入或者添加一个配置
resolve: {
alias: {
'vue$': 'vue/dist/vue.js'
}
},
再去执行webpack
就可以看到hello vueJs了 说明我们成功引入了vue
组件
4.webpack hot reload(热加载)
1.webpack 有用的flag
webpack --display-modules
: 你可以看到各个modules
的情况webpack --display-modules --display-reasons
: 除此之外我们还可以清楚看出每个module
的包含情况webpack -p
: 这会对打包的文件进行优化和压缩 特别的这对我们线上部署是很有用的webpack -w
(webpack --watch): 这会执行一个watch的状态 不用我们每次修改文件之后再回来执行webpack
这和gulp watch
是一个道理
2.webpack
在watch
机制上引进了hot reload
机制
在引入hot reload 机制后我们不仅不需要再次执行webpack
每次修改文件后也不用刷新我们的浏览器
这对每个开发人员来说肯定是非常好的事情
开始安装:
$ npm install webpack-dev-server -g
安装完毕之后理论上我们就可以使用了:
这时候我们并不是去执行webpack
而是去命令行执行:
$ webpack-dev-server --inline --hot
webpack-dev-server
会启动一个web服务器 默认端口是8080而--hot
则是代表我们去执行一个热加载
如果没有启动成功 你需要考虑下有没有其他程序占用这个8080端口 这个就和我们最常见的80端口被占用是一样的
在这之后如果你去修改你的诸如js文件
css文件
vue文件
那么浏览器会同时执行了修改 这真的是件非常cool的事情
5.webpack 插件配置
1.针对线上还是线下环境的处理
和很多框架一样(如我们的laravel
框架 会在.env
读取对是否是线上还是线下的变量)在开发和上线是两种不同的工作环境
而在webpack
里面是根据env.NODE_ENV
进行判断的 这里会有production
和local
两个选择
我们可以这样获取(这就和我们框架中debug
模式是否开启是一样的)
var debug = process.env.NODE_ENV !== "production";
有了我们的debug变量我们就可以获取到是否是线下环境 然后在我们的webpack.config.json
可以这样写:
module.exports = {
devtool: debug?"sourcemap":null,
...
}
这个就是如果是线下环境我们就生成一个sourcemap
如果是线上环境就不需要
2.plugins(插件)配置
我们在配置我们的插件的时候我们就需要把我们的插件放到我们的webpack.config.json
一个plugins
声明当中:
module.exports = {
devtool: debug?"sourcemap":null,
...
//这些是你需要一些plugins
plugins:debug ? [] : [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
...
]
}
这里是webpack
的插件说明和相应的配置https://github.com/webpack/docs/wiki/list-of-plugins
你可以去了解去使用你需要的plugins
下面提供一个webpack
官方提供的analyse
功能 http://webpack.github.io/analyse/
他会根据你的js文件分析你的项目的package和文件之间的关系
这会需要我们上传一个json文件 我们可以在项目中去生成这个json文件:
$ webpack --profile --json > status.json
这会将我们webpack
整个profile
生成一个status.json
到时我们上传这个status.json
文件就可以分析我们整个项目的结构了 :bowtie: