本篇文章主要介绍了详解webpack模块化管理和打包工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Webpack简介
webpack是当下最热门的前端资源模块化管理和打包工具。 它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际
需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。
模块系统的演进<script>标签
<script src="/UploadFiles/2021-04-02/module1.js">这是最原始的 JavaScript 文件加载方式,如果把每一个文件看做是一个模块,那么他们的接口通常是暴露在全局作用域下,也就是定义在 window 对象中,
不同模块的接口调用都是一个作用域中,一些复杂的框架,会使用命名空间的概念来组织这些模块的接口,典型的例子如 YUI 库。
这种原始的加载方式暴露了一些显而易见的弊端:
- 全局作用域下容易造成变量冲突
- 文件只能按照 <script> 的书写顺序进行加载
- 开发人员必须主观解决模块和代码库的依赖关系
- 在大型项目中各种资源难以管理,长期积累的问题导致代码库混乱不堪
CommonJS规范
CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中。
CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exports 导出对外的变量 或接口,通过 require() 来导入其他模块的输出到当前模块作用域中。
一个直观的例子
// moduleA.js module.exports = function( value ){ return value * 2; } // moduleB.js var multiplyBy2 = require('./moduleA'); var result = multiplyBy2(4);AMD规范
AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件。
模块通过 define 函数定义在闭包中,格式如下:
define(id"htmlcode">define('myModule', ['jquery'], function($) { // $ 是 jquery 模块的输出 $('body').text('hello world'); }); // 使用 require(['myModule'], function(myModule) {});注意 :在 webpack 中,模块名只有局部作用域,在 Require.js 中模块名是全局作用域,可以在全局引用。
定义一个没有 id 值的匿名模块,通常作为应用的启动函数:
define(['jquery'], function($) { $('body').text('hello world'); });AMD 也采用require()语句加载模块,但不同于CommonJS,他要求两个参数
第一个参数[module],是一个数组,里面的成员就是要加载的模块; 第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:
math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境
目前,主要有两个Javascript库实现了AMD规范: require.js 和 curl.js
require(['math'], function (math) { math.add(2, 3); });什么是 Webpack
Webpack 是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
Webpack 的特点
- 代码拆分
- Loader
- 智能解析
- 插件系统
- 快速运行
webpack基本使用
创建项目根目录
初始化
npm init 或 npm init -y全局安装
npm install webpack -g局部安装,在项目目录下安装
npm install webpack --save-dev--save: 将安装的包的信息保存在package中
--dev:开发版本,只是项目构建的时候使用,项目构建完成后并不依赖的文件
如果使用web开发工具,单独安装
npm install webpack-dev-server --save-dev基本使用
首先创建一个静态页面 index.html 和一个 JS 入口文件 entry.js:
<!-- index.html --> <html> <head> <meta charset="utf-8"> </head> <body> <script src="/UploadFiles/2021-04-02/bundle.js">创建entry.js
// entry.js : 在页面中打印出一句话 document.write('It works.')然后编译 entry.js并打包到 bundle.js文件中
// 使用npm命令 webpack entry.js bundle.js使用模块
1.创建模块module.js,在内部导出内容
module.exports = 'It works from module.js'2.在entry.js中使用自定义的模块
//entry.js document.write('It works.') document.write(require('./module.js')) // 添加模块加载css模块
1.安装css-loader
npm install css-loader style-loader --save-dev2.创建css文件
//style.css body { background: yellow; }3.修改 entry.js:
require("!style-loader!css-loader!./style.css") // 载入 style.css document.write('It works.') document.write(require('./module.js'))创建配置文件webpack.config.js
1.创建文件
var webpack = require('webpack') module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ //同时简化 entry.js 中的 style.css 加载方式:require('./style.css') {test: /\.css$/, loader: 'style-loader!css-loader'} ] } }2.修改 entry.js 中的 style.css 加载方式:require('./style.css')
3.运行webpack
在命令行页面直接输入webpack
插件使用
1.插件安装
//添加注释的插件 npm install --save-devbannerplugin2.配置文件的书写
var webpack = require('webpack') module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ //同时简化 entry.js 中的 style.css 加载方式:require('./style.css') { test: /\.css$/, loader: 'style-loader!css-loader' } ], plugins: [ //添加注释的插件 new webpack.BannerPlugin('This file is created by zhaoda') ] } }3.运行webpack
// 可以在bundle.js的头部看到注释信息 /*! This file is created by zhaoda */开发环境
webpack
--progress : 显示编译的进度
--colors : 带颜色显示,美化输出
--watch : 开启监视器,不用每次变化后都手动编译
12.4.7.1. webpack-dev-server
开启服务,以监听模式自动运行
1.安装包
npm install webpack-dev-server -g --save-dev2.启动服务
实时监控页面并自动刷新
webpack-dev-server --progress --colors自动编译
1.安装插件
npm install --save-dev html-webpack-plugin2.在配置文件中导入包
var htmlWebpackPlugin = require('html-webpack-plugin')3.在配置文件中使用插件
plugins: [ //添加注释的插件 new webpack.BannerPlugin('This file is created by zhaoda'), //自动编译 new htmlWebpackPlugin({ title: "index", filename: 'index.html', //在内存中生成的网页的名称 template: './index.html' //生成网页名称的依据 }) ]4.运行项目
webpack--save-dev以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]