【Webpack】 𺥯

目录

  • 关于模块化编程
  • Webpack的工作方式
  • 三个重要的概念
  • 使用Webpack创建一个项目
  • 正式使用Webpack
  • 使用Webpack进行ES6的模块化编程

原文: http://blog.gqylpy.com/gqy/283

"本质上,Webpack是一个现代JavaScript应用程序的==静态模块打包器==(module bundler).
当Webpack处理应用程序时,他会递归地创建一个==依赖关系图==(dependency graph),其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个包(bundle).

======== 安装Webpack =========
·
先创建一个文件夹(如:webpack-demo),进入文件夹后执行安装命令.
安装命令:npm install -g webpack 或者 npm install web pack --save
可简写为:npm i -g webpack
·
补充:如果是Mac系统,则需要加上sudo(权限问题,包括本文中后续的所有命令),即:sudo npm install -g webpack,回车后输入当前用户的密码即可.
·
安装完成以后,我们可以看到,在package.json文件中,已经有Webpack了:

图中安装的webpack-cli工具可用于在命令行运行Webpack.

@
***

关于模块化编程

什么是模块化编程?

==模块化编程是一种软件设计技术.==

在模块化编程中,开发者将程序分解成离散红能快,并称之为模块.

每个模块具有比完整程序更小的接触面,使得校验、调试、测试轻而易举.
精心编写的模块提供了可靠的抽象和封装界限,使得应用程序中每个模块都具有条理清楚的设计和明确的目的.

下面来参考一下某项目各个组件的分布结构:

可以看到,不同的业务逻辑,不同点的页面内容,应该分隔在不同的文件(模块)中,这样更加方便日后的调试与维护.

- - - - - - - - - - - - - - - - - - - - -
Node.js从一开始就支持模块化编程,然而在web,模块化的支持正缓慢到来.
在web,存在多种支持JavaScript模块化的工具,这些工具各有优势和限制.
Webpack正是从这些工具获得的经验和教训,而将模块的概念应用于项目中的任何文件.
- - - - - - - - - - - - - - - - - - - - -

为什么使用模块化编程?

模块化编程使我们能够把某一类功能组合成一个独立的文件,然后对外提供一个接口,这种方式更加简化了各个业务功能之间的协作关系,方便日后的维护和扩展.
***

Webpack的工作方式

Webpack会把我们的项目当做一个整体,通过一个给定的主文件(如: index.js),Webpack将从这个 给定的主文件 开始找到你的项目的所有依赖文件,使用loaders处理它们。最后打包成一个或多个浏览器可识别的JavaScript文件.

如下图所示:

***

三个重要的概念

======== ==入口文件== =========
·
入口文件(entry point)指示Webpack应该使用哪个模块来作为构建其内部依赖图的开始.
进入入口起点后,Webpack会找出有哪些模块和库是入口起点(直接和间接)依赖的.
所有的依赖项随即被处理,最后输出到称之为bundles的文件中.

======== ==出口文件== =========
·
出口文件告诉Webpack在哪里输出它所创建的bundles,以及如何命名这些文件,默认值为dist.
基本上,整个应用程序结构都会被编译到你指定的输出路径的文件夹中.

======== ==loader== =========
·
loader使Webpack能够处理那些非JavaScript文件(webpack自身只理解JavaScript).
loader可以将所有类型的文件转换为Webpack能够处理的有效模块,然后我们便可以利用Webpack的打包能力对它们进行处理.
·
本质上,loader是将所有类型的文件转换为应用程序的依赖图和最终的bundle能直接引用的模块.
***

使用Webpack创建一个项目

下面,我们使用上面的目录结构,并根据Webpack的上述几个概念,来写一个简单的Demo程序.

首先,我们在webpack-demo目录下面创建一个src目录——用于存放我们程序的原始文件(如:src/index.js).
然后,在webpack-demo目录下面创建一个index.html文件——用于使用打包后的出口文件.

新的目录结构如下:

准备就绪之后,我们开始在index.html文件中写入最基础的html代码:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Webpack Sample Project</title>
  </head>
  <body>
    <div id='root'>
    </div>
    <script src="./dist/main.js"></script>
  </body>
</html>

这些基础代码便是为了引入打包后的js文件,Webpack4默认的输出文件为dist/main.js

然后我们在index.js文件中写入如下代码:

// index.js
let greeting = "Hello Webpack!";
console.log(greeting);

最后,我们将在下面使用Webpack将该项目打包.
***

正式使用Webpack

这里我们将使用Webpack4打包,默认下载的就是Webpack4,Webpack3已基本不再使用了.

(补充:如果是Mac系统,则需要在命令前面加上sudo(权限问题),回车后输入当前用户的密码即可.)

======== 使用Webpacck3打包 =========
·
Webpack3可以在终端使用,基本使用方法(全局安装)如下:
web pack {entry file} {destination for bundled file}
·
指定入口文件后,Webpack将自动识别项目所依赖的其它文件.
不过需要注意的是:如果你的Webpack不是全局安装的,那么当你在终端中使用此命令时,需要额外指定其在node_modules中的地址.
·
Webpack3非全局安装的情况下打包:
./node_modules/.bin/webpack ./src/index.js destination/bundle.js

======== 使用Webpacck4打包 =========
·
Webpack4增加了模式区分,打包命令如下:
webpack --mode development(或production) 指定模式
·
两种模式:
development 开发者模式,打包默认不压缩代码.
production 生产者模式,上线时使用,会压缩代码,默认为此模式.
·
==Webpack4固定入口目录为src,入口文件必须为index.js,打包后文件在新增的dist目录下,出口文件为main.js.==
·
开始打包:
打包后可以看到,新的文件结构如下:

然后我们在浏览器中打开index.html文件的控制台,可以看到如下结果:

***

使用Webpack进行ES6的模块化编程

ES6引入了模块化编程的概念(关于ES6的新增语法,请参考此文献:ES6新增语法详述).

下面,我们继续使用上面的demo程序来测试ES6中的模块化编程.

1.首先,我们在src目录下新建一个sayhello.js问价,并加入如下代码:

// sayhello.js

let huaqiangu = "您好,花千骨!";
let baiqian = "您好,白浅!";
let jinmi = "您好,锦觅!";

export {huaqiangu, baiqian};

export default jinmi;
// 每个文件中只能有一个export default xx,
// import会将没有命中的变量名映射到export default导出的数据上面

2.随后,我们在index.js文件中导入上面创建的sayhello.js文件:

// index.js

let greeting = "Hello Webpack!";
console.log(greeting);

// import {huaqiangu, baiqian} from "./sayhello.js";
// 可不写文件后缀名:
import {huaqiangu, baiqian} from "./sayhello";

import jm from './sayhello';

console.log('huaxiangu:', huaqiangu);
console.log('baiqian:', baiqian);
console.log('jm:', jm);

3.最后,我们重新打包项目,并在浏览器中打开index.html文件的控制台,查看如下:

好了,我们就学到这里吧.


"

原文: http://blog.gqylpy.com/gqy/283

原文地址:https://www.cnblogs.com/bbb001/p/11368358.html

时间: 2024-10-12 19:49:11

【Webpack】 𺥯的相关文章

【webpack】-- 样式加载

加载css需要用到css-loader和style-loader css-loader将@import 和 url 处理成正规的ES6 import ,如果@import指向的是一个外部资源,css-loader会跳过,而只会对内部资源做处理.css-loader处理之后,style-loader会将输出的css注入到打包文件中.css默认是inline模式,且实现了HMR接口.但inline不太适用于生产环境(全部输出在页面上).还需要用extracttextplugin生成一个单独的css文

【webpack】-- 模块热替换

全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生产环境没有任何帮助(这一点区别.net热插拔).效果上就是界面的无刷新更新. HMR基于WDS,style-loader可以通过它来实现无刷新更新样式.但是对于JavaScript模块就需要做一点额外的处理,怎么处理继续往下看.因为HMR是用于开发环境的,所以我们修改下配置,做两份准备.一个用于生产

【webpack】webpack-dev-server生猛上手——让我们来搭一个webpack的微服务器吧!

[前言]:因为最近在搞百度地图API的时候用到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的"收尾工作"--即打包,而没有把它纳入到项目开发的"主体过程"中来,真是"物不尽其用".于是就有了我今天的这篇学习文章:利用webpack-dev-server搭建一个webpack的服务器 参考资料: webpack-dev-server的github地址:https://github.com/webpack

【webpack】-- 自动刷新

前端需要频繁的修改js和样式,且需要根据浏览器的页面效果不断的做调整:而且往往我们的开发目录和本地发布目录不是同一个,修改之后需要发布一下:另外一点就是并不是所有的效果都可以直接双击页面就能看到,我们常常需要在本地用nginx建一个站点来观察(自己电脑上ok了才放到测试环境去).所以如果要用手工刷新浏览器和手动(或点击)发布,还要启动站点,确实是个不小的体力活.而这三点webpack可以帮我们做到. webpack-dev-server webpack是通过webpack-dev-server(

【webpack】理解配置文件

学习链接: http://blog.csdn.net/hongchh/article/details/55113751 https://segmentfault.com/a/1190000009356434 主要分析开发(dev)和构建(build)两个过程涉及到的文件,故下面文件结构仅列出相应的内容. ├─build │ ├─build.js │ ├─check-versions.js │ ├─dev-client.js │ ├─dev-server.js │ ├─utils.js │ ├─v

【Webpack】学习随笔

参考链接:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具. Webpack 可以将多种静态资源 js.css.less 转换成一个静态文件,减少了页面的请求. 1.1使用淘宝 NPM 镜像 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 1.2使用 cnpm 安装 webpack cnpm install webp

【webpack】config/index.js

// see http://vuejs-templates.github.io/webpack for documentation. var path = require('path') module.exports = { build: {// 构建产品时使用的配置 env: require('./prod.env'),// webpack的编译环境 index: path.resolve(__dirname, '../dist/index.html'),// 编译输入的index.html文

【webpack】---url-loader 图片路径问题

webpack:url-loader 图片路径问题 我们使用webpack打包项目中,在处理图片路径时, 最常用的loader有两种, url-loader 和 file-loader. 我们在写项目中引用路径的时候,填写的URL是基于我们开发时的路径, 但是在webpack打包时, 会将各个模块打包成一个文件,里面引用的路径是相对于入口html文件,并不是相对于我们的原始文件路径的.loader 可以解析项目中引入的URL,并且根据配置,把图片拷贝到相应路径, 再将打包后的文件中的路径 替换为

【webpack】配置热更新

第一步 devServer: { contentBase: path.join(__dirname, 'dist'), compress: true, port: 9000, hot: true }, 第二部 plugins: [ new HtmlWebpackPlugin(), new webpack.HotModuleReplacementPlugin() ] 第三部(入口文件,entry) if (module.hot) { module.hot.accept() } 官方介绍 原文地址:

【webpack】中DllPlugin用法

首先准备需要打包的库 webpack.dll.js const webpack = require('webpack') const path = require('path') module.exports = { entry: { react: ['react', 'react-dom'] }, output: { library: 'react', // 以一个库的形式导出 filename: '[name].dll.js' }, plugins: [ new webpack.DllPlu