微信小程序案例 3.8:模块化实验博客

【愚公系列】《微信小程序与云开发从入门到实践》007-路由与模块化 在当今的移动应用开发中,微信小程序以其轻量化和便捷的特点,受到了越来越多开发者的青睐。而在构建复杂的小程序时,路由管理和模块化设计显得尤为重要。良好的路由设计可以帮助用户实现流畅的页面导航,而模块化则有助于提升代码的可读性和可维护性,促进团队协作。本篇文章将深入探讨微信小程序中的路由机制与模块化开发的最佳实践。我们将从基础概念入手,逐步解析如何有效地配置路由、管理页面间的跳转,以及如何将代码拆分成独立模块,提高项目的灵活性和扩展性。 阅读详情

一、实验目的

  1. 理解微信小程序模块化编程思想,掌握模块导出module.exports与导入require()的用法。
  2. 学会四种模块数据调用方式:全局模块、不同目录模块、相同目录模块、本模块的变量与函数引用。
  3. 掌握getApp()获取全局 App 实例,读取 app.js 中的全局变量与全局函数。
  4. 理解模块文件路径规则,区分相对路径、同目录文件引入写法。
  5. 拓展作业:为不同模块输出内容设置不同背景颜色,区分各个模块输出区域。

二、实验环境

微信开发者工具,新建小程序项目,不使用云服务、不使用模板。

项目目录结构

模块化
├─common
│  └─common.js       //不同目录下模块
├─pages
│  └─index
│     ├─index.js
│     ├─index.wxml
│     ├─index.wxss
│     └─my‑index.js  //相同目录下模块
├─app.js
├─app.json
└─app.wxss

三、实验效果

页面标题为红色居中:引用来自不同模块的变量和函数

  • 青色背景:输出全局模块的变量、函数返回结果
  • 黄色背景:输出不同目录模块的变量、函数返回结果
  • 紫粉色背景:输出相同目录模块的变量、函数返回结果
  • 浅蓝色背景:输出本模块的变量、函数返回结果

每一块背景区域分别展示对应模块的文字信息,完成多模块内容展示。

四、核心知识点

  1. module.exports:模块导出,把当前 js 文件内部变量、函数暴露出去,供其他 js 文件require导入使用。
  2. require ("文件路径"):导入外部模块,接收module.exports导出的对象。
    • 不同目录:使用相对路径 ../../common/common.js,../代表向上退回一级文件夹
    • 同目录模块:直接写文件名 my-index.js
  3. getApp():获取小程序全局唯一 App 实例,可以访问app.js里面定义的全局变量、全局函数。
  4. 小程序四种模块来源:
    • 全局模块:app.js,通过getApp()访问
    • 不同目录模块:根目录common/common.js,使用require加相对路径导入
    • 相同目录模块:和 index.js 同一个文件夹的my‑index.js
    • 本模块:当前 index.js 内部自己定义的变量与函数
  5. WXML 通过给 view 增加 class 类名,设置不同background-color背景色,完成拓展作业要求。

五、完整代码实现

1. common/common.js(根目录 common 文件夹)

// common.js
const comMsg = '来自不同目录下模块的变量';
function comFunc() {
  return '来自不同目录下模块的函数';
}

module.exports = {
  comMsg,
  comFunc
};

2. pages/index/my‑index.js(index 页面同目录)

// my‑index.js
const myIndexMsg = '来自相同目录下不同模块的变量';
function myIndexFunc() {
  return '来自相同目录下不同模块的函数';
}

module.exports = {
  myIndexMsg,
  myIndexFunc
};

3. app.js(项目根目录,全局模块)

// app.js
App({
  appMsg: '来自全局模块的变量',
  appFunc() {
    return '来自全局模块的函数';
  }
});

4. pages/index/index.js(页面逻辑)

// index.js
const indexMsg = '来自本模块的变量';
function indexFunc() {
  return '来自本模块的函数';
}
// 获取全局app实例
const app = getApp();
// 引入跨目录模块
const comm = require('../../common/common.js');
// 引入同目录模块
const myIndex = require('my-index.js');

Page({
  data: {
    // 全局模块
    msg1: 'index.js模块引用' + app.appMsg,
    msg2: 'index.js模块引用' + app.appFunc(),
    // 不同目录模块 common
    msg3: 'index.js模块引用' + comm.comMsg,
    msg4: 'index.js模块引用' + comm.comFunc(),
    // 相同目录 my‑index
    msg5: 'index.js模块引用' + myIndex.myIndexMsg,
    msg6: 'index.js模块引用' + myIndex.myIndexFunc(),
    // 本模块
    msg7: 'index.js模块引用' + indexMsg,
    msg8: 'index.js模块引用' + indexFunc()
  }
});

5. pages/index/index.wxml(页面结构,增加 class 区分背景)

<!--index.wxml-->
<navigation-bar title="模块化" back="{{false}}" color="black" background="#FFF"></navigation-bar>
<scroll-view class="scrollarea" scroll-y type="list">
  <view class="box">
    <view class="title">引用来自不同模块的变量和函数</view>
    <!--全局模块 青色背景-->
    <view class="item global-item">
      <view>{{msg1}}</view>
      <view>{{msg2}}</view>
    </view>
    <!--不同目录模块 黄色背景-->
    <view class="item other-dir-item">
      <view>{{msg3}}</view>
      <view>{{msg4}}</view>
    </view>
    <!--同目录模块 紫色背景-->
    <view class="item same-dir-item">
      <view>{{msg5}}</view>
      <view>{{msg6}}</view>
    </view>
    <!--本模块 浅蓝背景-->
    <view class="item self-item">
      <view>{{msg7}}</view>
      <view>{{msg8}}</view>
    </view>
  </view>
</scroll-view>

6. pages/index/index.wxss(页面样式)

/**index.wxss**/
page {
  height: 100vh;
  display: flex;
  flex-direction: column;
}

.scrollarea {
  flex: 1;
  overflow-y: hidden;
}

.item {
  line-height: 2em;
  font-size: 40rpx;
  padding:10rpx;
}
/*全局模块 青色*/
.global-item{
  background-color: cyan;
}
/*不同目录模块 黄色*/
.other-dir-item{
  background-color: yellow;
}
/*同目录模块 紫粉色*/
.same-dir-item{
  background-color: orchid;
}
/*本模块 浅蓝*/
.self-item{
  background-color: lightblue;
}

7. app.wxss(全局样式)

/**app.wxss**/
.box {
  margin: 20rpx;
  padding: 20rpx;
  border: 2rpx solid silver;
}

.title {
  font-size: 40rpx;
  font-weight: bolder;
  text-align: center;
  margin-bottom: 30rpx;
  color: red;
}

8. app.json

{
  "pages": [
    "pages/index/index"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTitleText": "模块化",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

六、实验步骤

  1. 创建新项目,选择不使用云服务,不使用模板。
  2. 根据目录结构新建common文件夹,新建common.js;在 pages/index 下新建my‑index.js。
  3. 将上面代码分别替换对应文件全部内容,所有标点符号必须是英文半角符号。
  4. Ctrl+S保存全部文件。
  5. 开发者工具执行:清缓存 → 重新编译。
  6. 模拟器观察页面,查看四种不同模块输出,查看不同颜色背景区分各个模块。

七、踩坑与问题总结

  1. require 导入模块报错找不到文件:一般是相对路径写错。跨目录需要写足够的../返回上层目录;同目录直接写文件名,不要加./也可以。
  2. 无法读取 app.js 全局数据:忘记调用const app = getApp(),必须先拿到 App 实例,才能访问全局成员。
  3. 拿不到外部模块变量函数:忘记写module.exports导出,没有导出的变量函数外部无法访问。
  4. 拓展作业背景色不生效:class 类名写错,wxml 中的 class 名称要和 wxss 选择器完全一致。
  5. navigation‑bar 警告:属于 Skyline 渲染模式组件警告,不影响程序功能运行。

注意:小程序模块化遵循 CommonJS 规范,每个 js 文件都是独立模块,变量默认私有,只有导出后外部才可以访问。

八、实验小结

本次实验学习小程序模块化开发,掌握module.exports导出,require()导入,getApp()访问全局模块。项目可以把公共功能抽离到独立 js 模块,实现代码复用,减少重复代码。拓展作业通过 CSS 背景颜色区分不同模块输出内容,更加直观看到各个模块运行结果。开发时需要格外注意文件路径书写,路径错误会直接导致模块加载失败。

微信小程序开发实战:打造个人博客与简历平台 点击我 阅读详情

相关推荐

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 520

案例 3.8 微信小程序模块化 技术博客

模块化可以把项目代码拆分成多个独立 JS 文件,每个模块拥有独立作用域,避免变量命名冲突,实现公共代码复用,方便后期维护。小程序中一共有四种数据来源:app.js 全局模块、其他文件夹下的外部模块、同一页面文件夹下的外部模块、当前页面脚本自身。外部模块依靠require()导入、导出;全局数据依靠getApp()获取。通过 CSS 背景色区分不同模块输出内容,可以直观看到模块化调用效果。

zjkzsk的博客 173

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 505

案例3.8模块化技术博客

/ app.jsApp({// 定义全局变量appMsg: '来自全局模块的变量',// 定义全局函数return '来自全局模块的函数'})App()是小程序的入口,其中的数据在整个小程序中唯一。其他任何 JS 文件都可以通过getApp()拿到这个实例,从而读取appMsg、调用appFunc()。全局模块:通过App()定义,通过getApp()获取;其他模块:通过导出,通过require()引入;路径规则:不同目录用相对路径(../../),相同目录直接写文件名;模块复用。

2602_96911805的博客 214

论文解读--Phase Noise in FMCW Radar Systems

相位噪声是现代雷达、通信、光谱和计量系统的基本性能参数之一。本文提出了一种适用于FMCW雷达系统的相位噪声理论。导出了一个新的设计方程,用于确定雷达系统中允许的源相位噪声电平的最大界。分析了在传输延迟小于参考振荡器相干时间时,相干混频引起的非线性相位噪声去相关函数;讨论了在传输延迟大于参考振荡器相干时间时,目标响应的频谱展宽。提出了收发链中各子系统的影响,并讨论了一种新的ADC相位噪声模型。介绍了相位噪声建模技术,然后将锁相环频率合成器与低噪声频率合成器进行比较,以演示减少相位噪声边带以改善检测和跟踪性能。

奔袭的算法工程师 3767

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 203

案例3.8 微信小程序模块化

这次实验让我理解了模块化开发的意义。把代码拆分到多个独立的js文件,不用把全部逻辑堆在同一个页面里,代码结构更清晰,实现代码复用,后续修改、维护项目也会更加方便。模块化是前端很常用的开发思路,之后写项目可以继续用这种方式组织代码。

yu_1030的博客 81

PSOC Creator 入门教程超详细

最近工作原因需要使用到赛普拉斯的一款芯片,奈何以前没有用过,所以趁这次也学习了一些简单的用法,总结一下,希望能帮到有需要朋友,因为网上关于这方面的文章少的可怜,详细点的更是少之又少!废话少说,正文开始.

qm_mq的博客 5746

微信小程序案例 3.8 模块化

通过本案例,掌握小程序 JS 模块化开发,学会使用 require 导入、module.exports 导出。模块化可以拆分复杂项目,实现代码复用。本次作业增加样式区分,直观看到不同模块输出内容,加深对模块化思想的理解,为后续复杂小程序项目开发打下基础。

jzszdd的博客 174

C#操作MySQL从入门到精通(3)——新建数据库、新建表

我们要首先新建一个数据库,并且在数据库中新建一系列的表来管理数据库。

qq_34059233的博客 951

《AgentScope-Java 深入浅出教程》第1章 AgentScope-Java 简介

AgentScope-Java 是一个面向智能体的编程框架,专门用于构建基于大语言模型(LLM)的 AI 应用程序。│ 你的业务应用 ││ AgentScope-Java 框架 ││ │ 智能体 │ │ 工具 │ │ 记忆 │ │ 模型 │ ││ LLM 服务 (DashScope/OpenAI/...) │能力说明类比ReAct 推理让智能体能够"思考"并"行动"就像人类思考后再做事工具调用让智能体能够执行外部操作就像人使用计算器、搜索引擎记忆管理让智能体能够记住对话历史。

步子哥的博客 592

微信小程序案例 3.8 模块化开发

本案例是微信小程序模块化练习,核心目标:把变量、函数拆分到不同 JS 文件,通过模块导入导出,在 index 页面引用。全局模块app.js跨目录模块同目录模块当前页面自身模块index.js作业附加要求:每一行输出文字设置不同背景颜色,区分不同模块来源。

wqwqwq123123的博客 72

【高级强化学习:算法、优化与泛化】第13章 扩散模型策略优化(Diffusion Policy Optimization)

\quad$ 计算均值 $\mu_t = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \tilde{\epsilon} \right)$.$\quad$ 组合得分估计: $\tilde{\epsilon} = \epsilon_{\text{unc}} + w \cdot (\epsilon_{\text{con}} - \epsilon_{\text{unc}})$.

u012133341的博客 338

微信小程序50个案例资源介绍:助力开发者快速成长

微信小程序50个案例资源介绍:助力开发者快速成长 【下载地址】微信小程序50个案例资源介绍 这是一份专为微信小程序开发者打造的宝贵资源,内含50个精选案例,覆盖工具、教育、娱乐等多个领域。无论你是初学者还是有一定经验的开发者,都能从中找到适合自己的学习素材。案例难度循序渐进,从基础到进阶,帮助你快速掌握开发技巧。每个案例...

gitblog_06732的博客 1139

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java Web 宠物之家系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

Java Web 宠物之家系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

caooooooca的博客 991

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

实验室管理微信微信端信息管理系统源码-SpringBoot后端+微信小程序前端+MySQL【可直接运行】

实验室管理微信微信端信息管理系统源码-SpringBoot后端+微信小程序前端+MySQL【可直接运行】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

w707050的博客 541

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

基于微信小程序的高校实验室安全教育平台系统(源码+讲解视频+LW)

在我国高等教育高质量发展与实验室安全管理要求不断提高的背景下,传统实验室安全教育模式面临覆盖不全面、内容更新慢、效果难评估等问题。基于微信小程序的高校实验室安全教育平台系统通过技术创新重构教育管理流程,整合安全知识学习、在线培训、考试考核、应急演练、隐患排查及数据分析等功能模块,旨在提升安全教育效率、增强安全意识、保障实验室安全。 系统以 SpringBoot 为核心框架,采用微服务架构设计,集成 MyBatis-Plus 实现高效数据操作,结合 Redis 缓存加速查询响应;前端基于微信小程序开发,采用原

QQ3359892174的博客 1034

Java Web 微信平台系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

直接拿走,意外获得200多套代码,需要的滴我Java Web 微信平台系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】(可提供说明文档(通过*AIGC*)

caooooooca的博客 848

微信小程序 模块化

exports 是 module.exports 的一个引用,因此在模块里边随意更改 exports 的指向会造成未知的错误。小程序目前不支持直接引入 node_modules , 开发者需要使用到 node_modules 时候建议拷贝出相关的代码到小程序的目录中,或者使用小程序支持的 npm 功能。可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块。不同的文件中可以声明相同名字的变量和函数,不会互相影响。​在需要使用这些模块的文件中,使用 require 将公共代码引入。

weixin_51705943的博客 398

Java Web 微信课堂助手微信端系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

开源免费分享Java Web 微信课堂助手微信端系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】可提供说明文档 可以通过*AIGC**技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

w707050的博客 860

Java Web 专利服务系统系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

Java Web 专利服务系统系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

rxy1176073894的博客 1091

微信小程序开发框架教程

微信小程序开发框架教程 项目介绍 微信小程序开发框架是一个用于快速构建微信小程序的工具集。该项目由wizjin开发,旨在提供一套简洁高效的开发环境,帮助开发者快速上手并构建功能丰富的小程序应用。 项目快速启动 环境准备 安装Node.js 安装微信开发者工具 克隆项目 git clone https://github.com/wizjin/weixin.git cd weixin 安装依赖 ...

gitblog_00807的博客 513

Java Web 微信电影订票系统系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

Java Web 微信电影订票系统系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】,拿走直接用(附源码,数据库,视频,可提供说明文档(通过*AIGC*)*技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍

2301_80924964的博客 927

【亲测免费】 微信小程序开源项目教程

微信小程序开源项目教程 项目介绍 本项目是一个微信小程序的开源模板,旨在帮助开发者快速搭建和部署微信小程序。项目地址为:https://github.com/xiaoshuaishuai319/weixinxiaochengxu.git。该模板包含了微信小程序的基本结构和常用组件,开发者可以根据自己的需求进行扩展和修改。 项目快速启动 环境准备 安装Node.js:确保你的开发环境中已经安装了N...

gitblog_00795的博客 1009

Java Web 绘画学习平台系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】

直接拿走,意外获得200多套代码,需要的滴我Java Web 绘画学习平台系统源码-SpringBoot2+微信小程序+MyBatis+MySQL8【含文档】(可提供说明文档(通过*AIGC*)

2501_92839909的博客 420
上一篇: 微信小程序案例 3.9:模板实验博客
下一篇: 微信小程序 swiper 与 switch 组件作业
ZeroT_Too
博客等级 码龄72天 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值