什么是webpack
总结 。webpack侧重打包,将前端所有的资源作为模块进行开发(例如图片 css文件 js文件等)通过loader(加载器)和plugins(插件)进行处理 打包成为符合生产环境部署的前端资源。
官方定义
webpack is a module bundler. Its main purpose is to bundle JavaScript
files for usage in a browser, yet it is also capable of transforming,
bundling, or packaging just about any resource or asset. webpack
可以看做是模块打包机:它做的事情是,分析你的项目结构,找到 JavaScript
模块以及其它的一些浏览器不能直接运行的拓展语言,并将其转换和打包为合适的格式供浏览器使用。
我的理解:前端内容逐渐丰富,功能也渐渐完善而独立,这时可以说是所谓面向对象,也可以说是模块化的思想出现在了更多人的脑海中。但是js本身是没有类似node的包管理机制的 ,所以webpack解决了一些问题。形象的说就是我们在开发的过程中,一些便于开发的资源(通过更方便的扩展语言书写代码,或是使用别人已经写好的模块直接使用直接展示等等)更加优雅的出现在它理所应当的地方。
安装
(类似node 在使用的时候还是需要安装包一些插件,下载速度让人知道了cnpm的必要性)
简单使用
在不使用配置文件的情况下的使用
配置文件
moudle.exports = {
entry:'./src/app.js',
output{
filename:'./dist/app.bundle.js'
}
}
文件名为 webpack.config.js
entry是入口文件(源文件)output则是输出文件。
很明显,如果在实际使用中还是用命令行来操作会显得不那么灵活,配置文件更为合适。在使用的时候直接在终端输webpack 就会自己找webpack.config.js 去操作
接下来是修改package.json的script部分。
比如增加
"scripts": {
"dev": "webpack -d --watch",
"prod": "webpack -p"
},
第一行检测代码变化,第二行压缩
使用的时候命令行$ npm run dev
-d的作用是增加了source maps 在浏览器调试的时候可以定位到源文件
接下来要让更多东西出现在dist里 。
首先是html文件
首先可以手动在dist文件夹里写htm文件 但是写死以后 我们想用的js文件就不那么方便的添加进去了。如果dist里面会随时添加进新的js文件,或者js文件名带哈希编码每次不同,那手动修改html的代价就会很大,所以一般不会选择手动去写
安装一个插件 html-webpack-plugin
$ npm install html-webpack-plugin --save-dev,
然后修改webpack.config.js
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/app.js',
output: {
path: __dirname + '/dist',
filename: 'app.bundle.js'
},
plugins: [new HtmlWebpackPlugin()]
};
有点像node的风格
跑起来就能看见生成的html文件了 甚至连title都写好了
如果想要修改的话也很容易
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/app.js',
output: {
path: __dirname + '/dist',
filename: 'app.bundle.js'
},
plugins: [new HtmlWebpackPlugin(
title:'hello world'
)]
};
内容部分就需要我们在src里面自己写一个index .html ,再加上template属性,指向我们写的html文件
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/app.js',
output: {
path: __dirname + '/dist',
filename: 'app.bundle.js'
},
plugins: [new HtmlWebpackPlugin({
template: './src/index.html',
})]
};
在展示的时候 js和css都很容易加 ,js解释过了,在src中写就完事了,写完在托管一下,改好webpack.config.js就能行了,webpack会自己绑到html文件里的,接下来说css
从前面的可以想到需要的应该就是插件,然后自己写css,最后改webpack.config.js就可以了。的确是这样
插件:
首先要知道的是 loader 类似于 task,能够处理文件,比如把 Scss 转成 CSS,TypeScript 转成 JavaScript 等。起到扩展语言的转化功能方便开发。但是我说的只是css的转接
$ npm install --save-dev css-loader style-loader
安装以后
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/app.js',
output: {
path: __dirname + '/dist',
filename: 'app.bundle.js'
},
plugins: [new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html',
})],
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
};
差不多了 在学到后面好用的会继续分享
补充一个插件
webpack-dev-server
安装以后($ npm install --save-dev webpack-dev-server)
使用时 w e b p a c k d e v − s e r v e r 会 发 现 功 能 上 首 先 可 以 代 替 刚 才 的 w a t c h 就 是 webpack dev-server 会发现功能上首先可以代替刚才的 watch 就是 webpackdev−server会发现功能上首先可以代替刚才的watch就是 npm run dev
再其次直接开了一个本地服务器 挂在localhost:8080上,也可以在webpack.config.js上做修改 使得直接打开浏览器
在module.exports = {}加上
devServer: {
open: true
}
就能直接打开了。