前言

随我来,去看看webpack!(为时未晚)============》第一版(较浅显的知识,懂得可忽略本文)


方向

  1. 安装,起步搭建运行. (粗略代过)
  2. 对于资源的管理,对于输出的管理. (举例介绍)
  3. 本地开发 (基础服务)
  4. 热更新=[模块热替换] (初步认识)

1.初步构建

mkdir webpack_demo && cd webpack_demo   // 新建一个文件 并进入更目录 `mkdir 是linux命令`
npm init -y // 初始一个packjage.json文件 -y 表示跳过询问步骤... //安装webpack
npm install webpack --save-dev // 添加webpack-cli依赖到"devDependencies"
//webpack4.0+ 需要安装webpack-cli
npm install webpack-cli --save-dev // 添加webpack-cli依赖到"devDependencies" </pre>

//生成如下目录

├── package.json

├── src //源目录(输入目录)

│   ├── index.js

├── dist // 输出目录

│   ├── index.html

// 修改 `dist/index.html`
&lt; !DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;webpack_demo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;script src="main.js"&gt;&lt;/script&gt; //为什么是main.js下面会解释
&lt;/body&gt;
&lt;/html&gt; //修改`src/index.js `
function component() {
var element = document.createElement('div');
element.innerHTML = "整一个盒子"
return element;
} document.body.appendChild(component());</pre>
<blockquote>
<code> npx webpack</code> (Node 8.2+ 版本提供的 npx 命令) <br><code>node node_modules/.bin/webpack</code> (8.2-版本)</blockquote>
<h5>会将我们的脚本作为<code>入口起点</code>,然后 输出 为 <code>main.js</code>.</h5>
<blockquote>
<code>打开dist/index.html 你将会看到 </code>整一个盒子<code> 几个字样~</code>
</blockquote>
<h3>2.资源管理,输出管理.基本开发起步</h3>

//生成如下目录

├── package.json

  • |── webpack.config.js //webpack配置文件

    ├── src //源目录(输入目录)

    │   ├── index.js

    ├── dist // 输出目录

    │   ├── index.html

先介绍一个Lodash库 它是一个一致性、模块化、高性能的 JavaScript 实用工具库 模块化处理非常适合值操作和检测(说白了就是webpack用了我也试试...)
lodash相关文档

npm install lodash --save //非仅在开发的时候使用的依赖 就是需要打包到生产环境的包 不加-dev


// src/index.js
import _ from 'lodash'; function component() {
var element = document.createElement('div');
element.innerHTML = _.join(['lodash','webpack'],''); //join将 array 中的所有元素转换为由''分隔的字符串 其它函数可以自己实践
return element;
}</pre>
<blockquote><code>打开index页面输出 loadshwebpack</code></blockquote>

//webpack.config.js

const path = require('path');

module.exports = {

entry: './src/index.js', //入口

output: { //出口

filename: 'main.js', //打包之后脚本文件名称

path: path.resolve(__dirname, 'dist') //路径指向执行 js 文件的绝对路径 此处为/dist

}

};

执行npx webpack --config webpack.config.js (把之前dist目录下main.js删除) 新的脚本生成(其实没多大变化..)

//  配置一下package.json
"scripts": {
"test": "echo \"Error: no test specified\" &amp;&amp; exit 1",
"build": "webpack" //添加此行命令 下次执行打包就是 npm run build 相当于上面的npx webpack --config webpack.config.js
}, // 资源的配置 css 图片 js等等.. 举例 css 图片
</pre>
<blockquote>
<code>npm install --save-dev style-loader css-loader</code> css的loader<br><code>npm install --save-dev file-loader</code> file(图片)对象的 loader</blockquote>

//生成如下目录

├── package.json

  • |── webpack.config.js //webpack配置文件

    ├── src //源目录(输入目录)

    │   ├── index.js
  • │   ├── index.css
  • │   ├── icon.jpg

    ├── dist // 输出目录

    │   ├── index.html
//修改webpack.config.js
const path = require('path'); //path路径模块
module.exports = {
entry: './src/index.js', //入口
output: { //出口
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.css$/, //检测正则匹配.css结尾的文件
use: [ //使用俩个loader
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|gif)$/, //正则匹配.png svg jpg gif结尾的文件
use: [ //使用file-loader
'file-loader'
]
}
]
}
};
//修改src/index.css
div{
color:red;
} //修改src/index.js
import _ from 'lodash';
import "./index.css";
import Icon from './icon.jpg'; function component() {
var element = document.createElement('div'); element.innerHTML = _.join(['loadsh', 'webpack'], ' ');
var myIcon = new Image();
myIcon.src = Icon; element.appendChild(myIcon);
return element;
} document.body.appendChild(component());
</pre>
<blockquote>
<code>npm run build(删除之前的dist目录下main.js) 你会看红字和图片</code> 以上就是资源管理的简短介绍</blockquote>
<blockquote>
<code>npm install --save-dev html-webpack-plugin 安装html-webpack-plugin模块</code> 模块用到功能:<br> 1: 动态添加每次compile后 js css 的hash<br> 2: 可配置多页面 单页面 这些 <br> 3: 其它没涉及到<br><code>npm install clean-webpack-plugin --save-dev 清除dist文件夹(每次删除麻烦了..)</code>配置一下</blockquote>

//修改目录

├── package.json

|── webpack.config.js //webpack配置文件

├── src //源目录(输入目录)

  • │   ├── app.js
  • │   ├── print.js

    │   ├── index.css

    │   ├── icon.jpg

    ├── dist // 输出目录

    │   ├── index.html
//webpack.config.js  ===============================================
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = {
entry: {
app: './src/index.js',
print: './src/print.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({
title: 'webpack_demo'
})
],
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
}
]
}
}; //修改src/index.js ===================================================
import _ from 'lodash'; //引入lodash模块
import "./index.css"; // index.css
import Icon from './icon.jpg'; // 图片
import printMe from "./print.js" // printJS function component() {
var element = document.createElement('div'); //创建一个元素 element.innerHTML = _.join(['loadsh', 'webpack'], ' '); // lodash中_.join方法
var myIcon = new Image(); //创建一个图片
myIcon.src = Icon; //src赋值 element.appendChild(myIcon); //追加图片 var btn = document.createElement('button'); //创建按钮
btn.innerHTML = 'Click me and check the console!'; //内容赋值
btn.onclick = printMe; //添加事件
element.appendChild(btn); //追加元素 return element;
} document.body.appendChild(component()); //追加元素到body中 //修改src/print.js ==========================================
export default function printMe() {
console.log('from print.js');
}

npm run build 会发现基本webpack的配置之后 ,有点模样(意思)了 打开页面index.html正常访问

3.本地开发

npm install --save-dev webpack-dev-server "webpack-dev-server" 为你提供了一个简单的 web 服务器,并且能够实时重新加载

 //修改webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack'); module.exports = {
entry: {
app: './src/index.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
devServer: {
contentBase: './dist'
},
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({
title: 'webpack_demo'
})
],
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
}
]
}
};
//修改package.json
...
"scripts": {
"test": "echo \"Error: no test specified\" &amp;&amp; exit 1",
"start": "webpack-dev-server --open", //start命令
"build": "webpack"
},
...

npm run start 本地起了8080端口的服务,你也可以看到自己的页面

4.热更新

//修改webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack'); module.exports = {
entry: {
app: './src/index.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
devServer: {
contentBase: './dist',
hot: true
},
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({
title: 'webpack_demo'
}),
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin()
],
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
}
]
}
};

npm run start 运行http://localhost:8080/ 然后你去修改print js的console(或者添加其他代码) 会发现命令行输出updated. Recompiling... 字样 这就是简单的实现了热更新

最后

本文只是大概从几个demo来对于webpack的基础概念 入口entry 出口 output loader plugins mode(没有直面涉及)几大模块的梳理于实践,让大家对于webpack不在那么陌生!

后续文章会从更深入的角度去学习webpack! 暂定下周1 发表文章(内容 详细介绍hot 实现一个简易的vue-cli等等)

demo的代码我会同步github

原文地址:https://segmentfault.com/a/1190000016927436

还不打算去认识一下webpack?的更多相关文章

  1. Vue.js——60分钟webpack项目模板快速入门

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  2. Vue.js——webpack

    Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...

  3. Vue.js——60分钟webpack项目模板快速入门

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  4. Vue 入门. 如何在HTML代码里面快速使用Vue

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  5. 我去,你竟然还不会用 synchronized

    二哥,离你上一篇我去已经过去两周时间了,这个系列还不打算更新吗?着急着看呢. 以上是读者 Jason 发来的一条信息,不看不知道,一看真的是吓一跳,上次我去是 4 月 3 号更新的,离现在一个多月了, ...

  6. 什么,你还使用 webpack?别人都在用 vite 搭建项目了

    一.vite 到底是干嘛的? vite 实际上就是一个面向现代浏览器,基于 ES module 实现了一个更轻快的项目构建打包工具. vite 是法语中轻快的意思. vite 的特点: 1.轻快的冷服 ...

  7. Webpack概念

    webpack概念 我经常用 webpack,打算做一次比较详细的概念清点和梳理.从 0 配置 webpack,由于 webpack5(2019.07.27)暂时还没有发布.并且从Webpack Mi ...

  8. r.js结合gulp等于webpack(angular为例)

    本人大学时玩dojo,开始了AMD模块化的不归路,工作后一直使用requirejs,感觉非常好.但是,近来随着react的火热,webpack成为了天下无敌的模块化工具,能做模块化,合并压缩,监视等, ...

  9. 细说 webpack 之流程篇

    摘自: http://taobaofed.org/blog/2016/09/09/webpack-flow/ 引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器 ...

随机推荐

  1. jquery.validate.js插件的使用方法

    近期做项目.须要用到 jQuery.validate.js插件,于是记录一下工作中的一些经验,以便日后学习. [样例例如以下] 1.前台页面 <form id="form1" ...

  2. 【Ubuntu】小技巧

    1.在 usr/share/applications/ 中可以找到 .desktop 文件,修改其内容可以修改你的桌面快捷方式, 例如图标或者分类还可以新建你的 .desktop ,如果你安装的软件没 ...

  3. Android面试常问的技术问题

    面试时技术经理会问你一些工作中遇到的Android方面的问题.谈谈你所做的项目,和在项目中所扮演的角色. 很多其它内容请參考我的博客:点击打开链接 1.怎样优化ListView? ①Item布局,层级 ...

  4. [C++设计模式] composite 组合模式

    组合(Composite)模式的其他翻译名称也非常多,比方合成模式.树模式等等.在<设计模式>一书中给出的定义是:将对象以树形结构组织起来,以达成"部分-总体"的层次结 ...

  5. .NET通用基本权限系统框架源代码

    DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援 ...

  6. 【CTSC 2007】 数据备份

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1150 [算法] 首先,有一个很显然的结论 : 如果要使距离和最小,必须选择相邻的办公 ...

  7. Apache上php项目简单部署

    1.建一个简单的php项目 1)在目录C:\wamp\www中新建一个文件夹,命名为20151021 2)在文件夹20151021中新建一个index.php文件,内容为: <?php echo ...

  8. php write excel

    /** * 写excel方法 */ function writeExcel($tabArr, $dataArr,$path) { require_once CODE_BASE2 . '/util/ph ...

  9. codevs1253 超级市场(dp)

    1253 超级市场  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 某人喜欢按照自己的规则去市场买菜,他每天 ...

  10. BZOJ 3831 单调队列DP

    思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...) i-stk[head]>k 删队头 f[stk[tail]]>f[i]||(f[stk[tail]] ...