背景

  1. 我们开发的功能可能是简单的,但是实现功能的代码行数却可能成千上万
  2. 出于易于维护、安全、服用,我们会根据我们的经验设计我们的代码,拆解成多个独立的功能模块(代码片段、更多的文件)
  3. JS的模块规范有很多,CMD、AMD、UMD、ES6Modules等。
  4. 我们知道浏览器的web页面却无法识别诸如require、import的语法或函数,那么浏览器如何加载js的呢?其它的模块资源(图片、样式文件)又是如何加载到浏览器中的呢?

浏览器加载资源

  1. 浏览器地址栏请求页面地址,服务器返回的是页面资源,页面渲染时再加载其它依赖的资源(样式、图片、脚本)
  2. 加载脚本使用html的 <script> 标记,可以直接已内联方式编写脚本,也可以加载远程js文件,
  3. 样式编写方式多种多样,写在dom的style属性,<style>标记,link css文件
  4. 图片主要分为<img />与样式表中的url,目前主要就是远程地址或者base64的字符串
  5. 加载多个资源需要多个<script> 标记,并且js文件直接很难看出依赖关系,实质上是各个js文件中变量、函数向页面的混入
  6. js文件的加载顺序,资源多种多样,等等。统一而且简单前端资源的加载是一种趋势,于是我们的朋友webpack诞生了。

介绍

webpack是一个基于node的开发时的工具,源代码(包括所有资源)经过webpack打包生成可以运行目标的代码(html页面或者一个库文件)

webpack有很多插件与loader,可以对源代码进行一些预处理(ES6翻译、代码压缩)

webpack,因为它可以让你以模块的方式思考

安装、demo参考

https://webpack.docschina.org/guides/getting-started/

//webpack.config.js
const path = require("path"); module.exports = {
optimization: {
minimize: false,
},
entry: "./src/main.js",
output: {
filename: "main.js",
path: path.resolve(__dirname, "dist"),
},
};
//index.js
export default function sum(a, b) {
return a + b;
}
//main.js
import sum from './index'
console.log(sum(1,2))

npm脚本添加

"build": "webpack"

执行后dist目录生成main.js

/******/ (() => { // webpackBootstrap
/******/ "use strict";
var __webpack_exports__ = {}; ;// CONCATENATED MODULE: ./src/index.js
function sum(a, b) {
return a + b;
} ;// CONCATENATED MODULE: ./src/main.js console.log(sum(1,2)) /******/ })()
;

webpack生成的文件是个立即执行的匿名函数,把main.js和index.js 的代码直接生成到启动函数中了,

总结

  1. webpack是我们的好朋友
  2. 可以把webpack理解成工程的编译行语言编译器(没有编译的源代码无法在浏览器中执行,可能描述的不够严谨)
  3. 目标代码一定有一个入口
  4. 目标代码主要就是用webpack的方式定义工程中的模块,执行入口,以及模块依赖加载的工作
  5. 目标代码这么简单?有没有更复杂一点的模块呢?

【前端必会】单页应用-你的新朋友wepack的更多相关文章

  1. [angularjs] 前端路由实现单页跳转

    代码: <div ng-app="Home"> <div ui-view></div> <div ng-controller=" ...

  2. 单页web应用是什么?它又会给传统网站带来哪些好处?

    文章来源:<单页Web应用:JavaScript从前端到后端> 什么是单页应用? 单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面.像所有的应用一样,它旨在帮助用户完成任务 ...

  3. 【转】移动Web单页应用开发实践——页面结构化

    1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用 ...

  4. 移动Web单页应用开发实践——页面结构化

    1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用 ...

  5. SPA解释:单页应用程序

    单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序. 单页W ...

  6. SPA (单页应用程序)

    单页Web应用 编辑 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程 ...

  7. 使用 Flask 和 Vue.js 来构建全栈单页应用

    在这个教程中,我将向你展示如何将 Vue 的单页面应用和 Flask 后端连接起来. 简单的来说,如果想在 Flask 中使用 Vue 框架是没有什么问题的. 但在实际中存在一个明显的问题就是 Fla ...

  8. 织梦DedeCMS首页调用单页文档内容的方法

    很多使用织梦dedecms单页文档功能的朋友都想知道如何在织梦首页调用单页文档的内容,下面就教大家具体的实现方法: 具体步骤如下: 首先在首页模板需要显示单页文档内容的地方插入如下代码: {dede: ...

  9. 前端单页应用SEO解决方案

    在这里只会提到Google的解决方案,日后再补充百度的解决方案 我们经常使用的单页都是#!来做应用的前端路由,因为这个在多个版本浏览器上有很好的兼容性 当Google发现URL里有#!符号,Googl ...

随机推荐

  1. 5-2 SpringCloud | 微服务

    服务器端项目演进 服务器初期状态 最早的服务器就是安装部署了一些静态页面 功能非常单一,只能做信息的呈现和输出 服务器动态页面 后来因为业务和技术的发展,页面连接了数据库,页面中大部分数据来自于数据库 ...

  2. React中useEffect的简单使用

    学习hooks 在 React 的世界中, 组件有函数组件和类组件 UI 组件我们可以使用函数,用函数组件来展示 UI. 而对于容器组件,函数组件就显得无能为力. 我们依赖于类组件来获取数据,处理数据 ...

  3. 工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03

    作者:vivo 互联网服务器团队- Cheng Wangrong 本文是<vivo营销自动化技术解密>的第4篇文章,分析了在营销自动化业务引入工作流技术的背景和工作流引擎的介绍,同时介绍了 ...

  4. 常用的函数式接口Function接口和常用的函数式接口Function接口默认方法andThen

    常用的函数式接口Function接口 package com.yang.Test.FunctionStudy; import java.util.function.Function; /** * ja ...

  5. 搭建一个完整的K8S集群-------基于CentOS 8系统

    创建三个centos节点: 192.168.5.141 k8s-master 192.168.5.142 k8s-nnode1 192.168.5.143 k8s-nnode2 查看centos系统版 ...

  6. python jinjia2 高级

    高层api class jinja2.Environment([options]) Enviroment:环境,是Jinjia2的核心组件,它包含重要的共享变量,如配置.过滤器.测试.全局变量.模板加 ...

  7. 使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_96 一些重要文档格式之间的互转在目前显得尤为重要,pdf作为通用格式在现在各个平台上兼容性是最好的,所以写python脚本将这些w ...

  8. Odoo 14 升级模块后为什么template不生效?

    # 升级模块后为什么template不生效? # 直接原因是因为你在record标签的父级data标签标签中设置了noupdate为true.这就导致你后面无论你怎么修改data下面的子标签内容,都不 ...

  9. nginx代理与反向代理原理

    简介: nginx是一个http服务器,稳定性好,底层由c编写,一个高性能的http 服务器/反向代理服务器及电子邮件代理服务器. nginx可以做web服务器,也可以做网关,主要应用于代理和方向代理 ...

  10. 来看看这位年轻的 eBay 小伙是如何成为 Committer

    介绍一下我自己 目前就职于eBay中国,专注于微服务中间件,分布式架构等领域,同时也是狂热的开源爱好者. 如何成为一个commiter 过去几个月,我一直持续在为 Apache DolphinSche ...