01-Vue源码的构建过程解析之scripts/config.js

Node.js单元测试实战:用Mocha和原生assert构建可靠测试体系 单元测试是保障Node.js应用质量的基础工程实践,其核心在于确定性、可调试性与契约一致性。Mocha作为轻量级测试框架,不封装断言逻辑,配合Node.js原生assert模块,提供无抽象层的严格相等(strictEqual)与深度相等(deepStrictEqual)能力,避免Jest等工具因序列化或Mock机制引入的不可控行为。这种组合在类型校验、Buffer字节比对、错误边界覆盖等关键场景中展现出更高可靠性与调试效率,特别适用于中大型项目、IoT协议解析及遗留系统渐进式测试补全。本文聚焦Mocha+a 阅读详情

本来想在一片文章中吧构建的过程说清楚呢,谁知道光一个scripts/config.js就那么长。还是单拉出来看吧!!

贴代码时间到:)
请看注释
这里总结一个脚本用到的插件列表,后来慢慢了解

  • rollup-plugin-buble
  • rollup-plugin-alias
  • rollup-plugin-commonjs
  • rollup-plugin-replace
  • rollup-plugin-node-resolve
  • rollup-plugin-flow-no-whitespace
    那么长一个列表,这就是不愿读别人的源码的原因,鬼知道他们用了哪些插件。反过来想,看别人源码,可以了解好多自己不知道的包,也是极好的:)

啥也不说了,在csdn的markdown编辑器上看代码真是太难了,我还是去vsc里面吧。

大体上看完了,除了那个比较大的builds对象,这个是各个target的具体构建配置,都是重复性很高的东西,没必要一次性看完。

这个文件就是给rollup用的,是rollup的配置文件。可以命令行传参TARGET来指定编译的target,如果不指定就是全部都构建。

const path = require('path') // node内建的操作文件系统路径的库
const buble = require('rollup-plugin-buble') // buble是一个ES2015的转码器,跟babel是一个级别上的,估计没有babel应用广泛
const alias = require('rollup-plugin-alias') // 别名插件,用来替换import中的别名
const cjs = require('rollup-plugin-commonjs')
const replace = require('rollup-plugin-replace') // 字符串替换
const node = require('rollup-plugin-node-resolve')
const flow = require('rollup-plugin-flow-no-whitespace')
const version = process.env.VERSION || require('../package.json').version // 当前构建的版本,以命令行传参优先级高
const weexVersion = process.env.WEEX_VERSION || require('../packages/weex-vue-framework/package.json').version

// 没啥好说的这是Vue文件中头部的版本和版权字符串
const banner =
  '/*!\n' +
  ` * Vue.js v${version}\n` +
  ` * (c) 2014-${new Date().getFullYear()} Evan You\n` +
  ' * Released under the MIT License.\n' +
  ' */'

const weexFactoryPlugin = {
  intro () {
    return 'module.exports = function weexFactory (exports, document) {'
  },
  outro () {
    return '}'
  }
}

const aliases = require('./alias')
const resolve = p => {
  const base = p.split('/')[0]
  if (aliases[base]) {
    return path.resolve(aliases[base], p.slice(base.length + 1))
  } else {
    return path.resolve(__dirname, '../', p)
  }
}

// 各种target的配置
const builds = {
  // Runtime only (CommonJS). Used by bundlers e.g. Webpack & Browserify
  'web-runtime-cjs-dev': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.common.dev.js'),
    format: 'cjs',
    env: 'development',
    banner
  },
  'web-runtime-cjs-prod': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.common.prod.js'),
    format: 'cjs',
    env: 'production',
    banner
  },
  // Runtime+compiler CommonJS build (CommonJS)
  'web-full-cjs-dev': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.common.dev.js'),
    format: 'cjs',
    env: 'development',
    alias: { he: './entity-decoder' },
    banner
  },
  'web-full-cjs-prod': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.common.prod.js'),
    format: 'cjs',
    env: 'production',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime only (ES Modules). Used by bundlers that support ES Modules,
  // e.g. Rollup & Webpack 2
  'web-runtime-esm': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.esm.js'),
    format: 'es',
    banner
  },
  // Runtime+compiler ES modules build (for bundlers)
  'web-full-esm': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.esm.js'),
    format: 'es',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime+compiler ES modules build (for direct import in browser)
  'web-full-esm-browser-dev': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.esm.browser.js'),
    format: 'es',
    transpile: false,
    env: 'development',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime+compiler ES modules build (for direct import in browser)
  'web-full-esm-browser-prod': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.esm.browser.min.js'),
    format: 'es',
    transpile: false,
    env: 'production',
    alias: { he: './entity-decoder' },
    banner
  },
  // runtime-only build (Browser)
  'web-runtime-dev': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.js'),
    format: 'umd',
    env: 'development',
    banner
  },
  // runtime-only production build (Browser)
  'web-runtime-prod': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.min.js'),
    format: 'umd',
    env: 'production',
    banner
  },
  // Runtime+compiler development build (Browser)
  'web-full-dev': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.js'),
    format: 'umd',
    env: 'development',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime+compiler production build  (Browser)
  'web-full-prod': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.min.js'),
    format: 'umd',
    env: 'production',
    alias: { he: './entity-decoder' },
    banner
  },
  // Web compiler (CommonJS).
  'web-compiler': {
    entry: resolve('web/entry-compiler.js'),
    dest: resolve('packages/vue-template-compiler/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-template-compiler/package.json').dependencies)
  },
  // Web compiler (UMD for in-browser use).
  'web-compiler-browser': {
    entry: resolve('web/entry-compiler.js'),
    dest: resolve('packages/vue-template-compiler/browser.js'),
    format: 'umd',
    env: 'development',
    moduleName: 'VueTemplateCompiler',
    plugins: [node(), cjs()]
  },
  // Web server renderer (CommonJS).
  'web-server-renderer-dev': {
    entry: resolve('web/entry-server-renderer.js'),
    dest: resolve('packages/vue-server-renderer/build.dev.js'),
    format: 'cjs',
    env: 'development',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  'web-server-renderer-prod': {
    entry: resolve('web/entry-server-renderer.js'),
    dest: resolve('packages/vue-server-renderer/build.prod.js'),
    format: 'cjs',
    env: 'production',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  'web-server-renderer-basic': {
    entry: resolve('web/entry-server-basic-renderer.js'),
    dest: resolve('packages/vue-server-renderer/basic.js'),
    format: 'umd',
    env: 'development',
    moduleName: 'renderVueComponentToString',
    plugins: [node(), cjs()]
  },
  'web-server-renderer-webpack-server-plugin': {
    entry: resolve('server/webpack-plugin/server.js'),
    dest: resolve('packages/vue-server-renderer/server-plugin.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  'web-server-renderer-webpack-client-plugin': {
    entry: resolve('server/webpack-plugin/client.js'),
    dest: resolve('packages/vue-server-renderer/client-plugin.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  // Weex runtime factory
  'weex-factory': {
    weex: true,
    entry: resolve('weex/entry-runtime-factory.js'),
    dest: resolve('packages/weex-vue-framework/factory.js'),
    format: 'cjs',
    plugins: [weexFactoryPlugin]
  },
  // Weex runtime framework (CommonJS).
  'weex-framework': {
    weex: true,
    entry: resolve('weex/entry-framework.js'),
    dest: resolve('packages/weex-vue-framework/index.js'),
    format: 'cjs'
  },
  // Weex compiler (CommonJS). Used by Weex's Webpack loader.
  'weex-compiler': {
    weex: true,
    entry: resolve('weex/entry-compiler.js'),
    dest: resolve('packages/weex-template-compiler/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/weex-template-compiler/package.json').dependencies)
  }
}

/***
 * 使用name获取指定的配置,从上面builds中
 */
function genConfig (name) {
  const opts = builds[name]
  // 这个是符合rollup的配置文件,看一遍rollup文档就知道啥意思了
  const config = {
    input: opts.entry, // 入口文件
    external: opts.external,
    plugins: [ // 需要的插件
      // 字符串替换插件
      replace({
        __WEEX__: !!opts.weex,
        __WEEX_VERSION__: weexVersion,
        __VERSION__: version
      }),
      flow(),
      alias(Object.assign({}, aliases, opts.alias))
    ].concat(opts.plugins || []),
    output: {
      file: opts.dest,
      format: opts.format,
      banner: opts.banner,
      name: opts.moduleName || 'Vue'
    },
    onwarn: (msg, warn) => {
      if (!/Circular/.test(msg)) {
        warn(msg)
      }
    }
  }

  // 环境变量注入
  if (opts.env) {
    // 直接使用replace插件替换文件中的process.env.NODE_ENV,这是用的字符串替换,注意
    // 这里用了stringify,不用会有问题的,可以自己思考一下哦
    config.plugins.push(replace({
      'process.env.NODE_ENV': JSON.stringify(opts.env)
    }))
  }

  // 如果没有明确配置了不需要转码,就用把buble放到插件列表中
  if (opts.transpile !== false) {
    config.plugins.push(buble())
  }

  Object.defineProperty(config, '_name', {
    enumerable: false,
    value: name
  })

  return config
}

// 获取命令行的环境变量参数,拿其中的TARGET,这是目标,就是告诉我们要编译针对哪个环境的
if (process.env.TARGET) {
  module.exports = genConfig(process.env.TARGET)
} else {
  // 没有指定TARGET的话就会编译全部的
  exports.getBuild = genConfig
  exports.getAllBuilds = () => Object.keys(builds).map(genConfig)
}

觉得好的给我点赞哦:)

从零构建拼豆在线编辑器:技术架构、本地部署与二次开发指南 在线图形编辑器是前端开发中常见的应用类型,其核心原理是通过数据模型(如二维数组)表示画布状态,并利用Canvas或SVG进行可视化渲染。这类技术广泛应用于像素画设计、UI原型制作等领域,其价值在于将复杂的图形操作抽象为可编程的交互逻辑,极大提升了设计效率与协作能力。本文以拼豆设计为具体应用场景,深入解析一个功能完备的在线编辑器的实现方案,涵盖环境配置、核心模块(如画布渲染、颜色管理、项目导出)的构建,并针对二次开发中的常见需求(如自定义色板、性能优化、云端集成)提供实践指导。通过理解其数据模型与渲染引擎的协 阅读详情

相关推荐

Jekyll条件加载实战:用Front matter和Liquid实现脚本与样式按需加载

静态网站生成器中的资源加载优化,本质是平衡性能与可维护性的工程实践。其核心原理在于构建期决策而非运行时判断,通过元数据驱动(如Front matter)与模板逻辑(如Liquid)协同,在HTML生成阶段精准注入Scripts和Stylesheets。这种方案避免了JavaScript动态加载的不确定性,显著提升首屏性能、降低Lighthouse评分衰减风险,并增强团队协作的语义一致性。典型应用场景包括技术文档站按内容类型加载Mermaid、MathJax或CodeMirror,博客分类页差异化引入图表库或

weixin_33686714的博客 624

Pi框架源码解析:从Python到TypeScript的AI工具链学习指南

源码阅读是深入理解现代软件架构的核心方法,尤其对于融合了Python后端与TypeScript前端的AI工具链项目。通过系统化梳理源码结构、模块设计与通信机制,开发者能够掌握框架底层原理与工程实践。在AI Agent开发领域,理解Claude Code等工具的集成方式,以及Python环境配置与TypeScript前端交互的实现细节,具有重要技术价值。本文以Pi框架为例,提供了一份结构化源码解析资料的使用指南,涵盖环境搭建、模块解读到实际应用的全流程,帮助开发者高效学习AI工具链开发,并解决vscode p

weixin_30325971的博客 537

基于SpringBoot+Vue的校企实习管理系统:毕业设计实战指南

在软件开发领域,前后端分离架构已成为构建现代Web应用的主流范式,其核心原理在于将用户界面与业务逻辑解耦,通过API进行通信。这种架构模式带来了清晰的分工、独立的部署和更好的可维护性等技术价值,广泛应用于各类管理系统的开发。SpringBoot作为高效的Java后端框架,与Vue.js这一渐进式前端框架的结合,构成了当前企业级应用开发的热门技术栈。本文聚焦于一个典型的应用场景——校企实习管理平台,详细解析如何利用SpringBoot和Vue技术栈,从零开始搭建一个具备完整业务流程的系统。该系统涵盖了学生、企

caodaoxi的专栏 506

npm scripts(npm 脚本)

npm scripts 文章目录npm scripts一、什么是 npm 脚本?二、原理三、通配符四、传参五、执行顺序六、默认值七、钩子八、简写形式九、变量十、常用脚本示例 Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。 本文介绍如何使用 npm 脚本(npm scripts)。 一、什么是 npm 脚本? npm 允许在package.json文件里面,使用scripts字段定义脚本命令。 { // ... "scripts": { "build": "n

qq_43456781的博客 1570

AI编程模型第一梯队:Opus/Sonnet/Codex工程能力深度解析

AI编程助手已从基础代码补全迈向复杂工程理解阶段。所谓‘工程级AI’,核心在于能否准确识别跨文件依赖、稳定处理多文件上下文、并在长对话中保持逻辑一致性——这三者共同构成现代IDE智能体的技术基线。其中,Claude Opus 4.6凭借高精度跨模块调用链识别与动态上下文裁剪,在微服务重构与私有化代码审计场景中表现突出;GPT Codex系列则依托AST-aware注意力机制与状态机建模,在TypeScript泛型解析和Docker配置约束验证等硬核任务中建立优势。本文聚焦真实开发现场,拆解五款主流模型在Ex

weixin_30279315的博客 382

Eleventy静态网站生成器核心原理与工程实践指南

静态网站生成器(SSG)是JAMstack架构中实现高性能、高SEO友好性网站的关键技术。其本质是在构建时(build-time)将模板、内容和数据预编译为纯HTML文件,规避运行时开销。Eleventy作为轻量级SSG代表,以零运行时依赖、原生Node.js支持和灵活的数据层设计脱颖而出。它不抽象路由与状态,而是通过文件系统约定、`_data/`目录驱动的数据注入、Nunjucks模板的JavaScript表达式能力,以及Collections动态页面生成机制,实现可预测、可审计的静态输出。本文深入解析其

weixin_30721077的博客 353

vue package.json Script配置讲解

你可以根据需要选择适当的命令来运行你的项目。例如,如果你想在开发模式下运行项目,可以使用 npm run dev 命令。如果你想构建生产环境的项目,可以使用 npm run build 命令。记住,在运行这些命令之前,确保已经在项目目录下执行了 npm install 命令,以安装所需的依赖项。这些是常见的脚本命令,用于开发、构建、检查代码质量和格式化代码。

还在活水泥的未来包工头 1715

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 888

vue的script的三种写法

在setup函数中定义了handleSearch方法和clearSearch方法,并将它们作为返回值暴露给模板使用。请注意,使用Composition API时,我们不再使用data选项和传统的Options API写法,而是在setup函数中定义响应式数据和方法,并通过返回值暴露给模板使用。使用Composition API的好处是可以将相关的逻辑进行组合,而不是按照选项的方式进行划分。使用 script setup 语法,我们可以直接在脚本块中定义变量和方法,无需再通过return将它们导出。

m0_51354601的博客 2926

网络安全隔离技术解析:单向网闸与双向网闸的核心差异与应用场景

本文深入解析网络安全隔离技术中的单向网闸与双向网闸,详细比较两者的核心差异与应用场景。单向网闸通过物理隔离确保数据单向流动,适用于金融交易等高风险场景;双向网闸则支持严格安检的双向数据交互,常见于医疗、政务等领域。文章还提供了选型建议和技术发展趋势,帮助读者根据安全需求和业务场景选择最适合的网闸解决方案。

weixin_29323365的博客 529

STM32/GD32以太网开发避坑指南:ZLG EPORTM模块调试实战(含YT8512H配置)

本文针对STM32/GD32平台使用ZLG EPORTM模块进行以太网开发时遇到的常见问题,提供了详细的调试实战指南。重点解析了从传统PHY驱动迁移到YT8512H芯片的核心步骤,包括软件复位延时、RMII时钟配置等关键陷阱,并分享了LWIP集成与稳定性验证的实用经验,帮助开发者高效避坑。

rice5的博客 1163

vue项目的一些配置

vue项目的一些配置。

weixin_52053631的博客 294

告别图像畸变:手把手教你用HALCON的`gen_image_to_world_plane_map`做高精度视觉测量

本文详细解析了HALCON的`gen_image_to_world_plane_map`算子在工业视觉测量中的应用,通过精确的几何变换消除透视畸变,提升测量精度。文章涵盖相机标定、世界坐标系建立、实战应用及性能优化,适用于液晶屏质检、金属板检测等场景,帮助工程师实现高精度视觉测量。

weixin_28718487的博客 424

webpack环境变量 和 vite 环境变量

/** 前篇博客为详解vue多环境配置,此篇为如何使用,不多说解释,直接说代码使用方式 **/ tps:详解Vue多环境配置点击 第一 配置package.json package.json 里的 scripts 配置 serve test build,通过 --mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development 通过 npm run test 打包测试 , 执行 testing 通过 npm run build 打包正式 , ...

技术前端,忠于热爱 @0.活在风浪里 3088

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8607

STM32CubeMX定时器配置

因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable。哪来的主定时器和从定时器呢?把待测 PWM 的高电平当“门”,连接到ETR。

2402_89015641的博客 3188

从零构建轻量级项目爆料站:Vue 3 + VitePress 技术实践

在Web开发领域,静态站点生成(SSG)和前端框架是构建高效、低成本内容展示平台的核心技术。其原理在于将内容与样式分离,通过预渲染生成静态HTML文件,从而实现极快的加载速度和简化的部署流程。这种架构的技术价值在于为独立开发者和小型团队提供了快速启动项目、可视化进度并与社区互动的能力,尤其适用于游戏开发日志、开源项目路线图等需要定期更新内容的场景。本文以构建一个类似“侠隐水门”的项目爆料站为例,详细演示了如何利用Vue 3和VitePress,结合自动化脚本和静态托管服务,实现一个包含进度展示与分阶段内容发

weixin_30902251的博客 386

Xilinx/AMD公司7系列FPGA的ISERDESE2仿真的”天坑”(附verilog的源码vivado仿真工程)

研究LVDS输出接口的ADC与7系列(ZYNQ)FPGA对接过程中,在Vivado中搭建了ISERDESE2的仿真工程,仿真结果ISERDESE2的并行输出口一直输出X或Z,这个坑之大,耗费了我数天的时间,可以称为“天坑”了。同步复位的要求肯定是高于异步复位的,古话说得好“两害相权取其轻”,所以,跟古话对着干就对了!就当RST是同步复位吧,最后经过反复验证,发现。开始怀疑复位信号是否高电平持续时间不够长?但是没有查到复位时间的要求 : - (

FPGA艺术家的博客 171

Vue+TypeScripts 尚硅谷vue3教程学习笔记

Vue 3 是 Vue.js 框架的一次重大升级,于 2020 年 9 月 18 日正式发布,代号为“One Piece(海贼王)”。作为新一代的前端构建框架,它在性能、源码架构、开发体验以及生 态支持上进行了全面的革新,旨在为开发者提供更高效、更灵活的开发体验。核心特性与优势Vue 3 在底层进行了大量优化,使得应用运行更加流畅。其打包体积减少了 41%,初次渲染速度提升了 55%,更新渲染速度提升了 133%,同时内存占用减少了 54%。

weixin_63108234的博客 251

InVEST模型 | HAbitat quality模块计算生境质量

 本文详细介绍使用InVEST模型中HAbitat quality模块计算生境质量,包含各个参数的含义、所需数据、数据处理以及需要各个参数注意的地方等过程。

地理空间科学的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SUMTEC:面向静态博客的构建时内嵌组件协议

静态博客(static blog)作为轻量、安全、高性能的内容发布范式,长期受限于交互能力薄弱与功能扩展困难。其核心矛盾在于:既要零运行时依赖以保障首屏速度与SEO友好性,又需支持结构化、可复用的内容增强能力。SUMTEC 协议应运而生——它不是前端框架,而是定义在 HTML 层的构建时语义规范,通过 `<sumtec>` 自定义标签将类型(type)、参数(props)与内容插槽(slot)解耦,交由 Hugo/Jekyll 等静态站点生成器(SSG)在构建阶段解析并合成纯静态 HTML。该设计天然规避

unixboy 570

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TradingAgents-CN多智能体交易系统:技术架构深度解析与部署实践

TradingAgents-CN是一个基于多智能体LLM架构的中文金融交易分析框架,通过模拟真实投资团队协作模式,为开发者提供专业级的AI投资分析能力。该系统采用FastAPI + Vue 3现代化技术栈,支持A股、港股、美股等全市场数据,实现了从数据采集到智能决策的完整金融分析闭环。 ## 技术架构深度解析 ### 多智能体协作架构设计 TradingAgents-CN的核心创新在于其多智

gitblog_00048的博客 663

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

从零到一构建情感疗愈应用:暖屿 (Warm Isle) 全栈技术架构深度解析

摘要 《暖屿技术实现讲解文档》详细介绍了情感疗愈应用暖屿的全栈技术架构。项目基于FastAPI+Vue3前后端分离架构,采用Docker容器化部署,核心功能包含情绪管理、AI陪伴等。文档系统讲解了后端基础设施(配置管理、依赖注入)、业务逻辑、实时通信等设计,以及前端Vue3的状态管理、组件化实践。关键技术包括异步架构、AI集成、支付系统等,并涵盖测试、代码规范及扩展建议。目标读者为开发者、技术学习者和项目维护者,提供了现代Web应用的完整技术实现参考。

2402_83239589的博客 1642

如何用 trackerslist 扩大 BT 下载的种子触达面:公共 Tracker 清单使用指南

trackerslist 是一个每日自动更新的公共 BitTorrent Tracker 清单,当前收录 73 个经过可用性检测的 Tracker 服务器。当客户端找 peer 慢、下载中途停滞、资源眼看要变死种时,向客户端补充一组可用的 Tracker 地址,是成本最低的排查手段之一。 ## 项目速览:定位与清单文件对照 一句话定位:一个由脚本每日巡检、自动维护的公共 Tracker 服务器

gitblog_00115的博客 377

基于YOLOv8/v10/v11/v12/26的森林野外火灾火焰烟雾检测系统(Spring Boot+Vue+Flask+DeepSeek+千问大模型)完整实现与模型对比分析

基于YOLOv8/v10/v11/v12/26的森林野外火灾火焰烟雾检测系统(Spring Boot+Vue+Flask+DeepSeek+千问大模型)完整实现与模型对比分析

斌擎科技 482

Vue 3与TypeScript工程化实践与面试要点

TypeScript作为JavaScript的超集,通过静态类型检查显著提升了代码的可靠性和开发效率。其核心原理是通过类型注解和类型推断,在编译阶段捕获潜在错误。在工程实践中,TypeScript与Vue 3的组合式API深度集成,能够实现更智能的代码提示和类型安全。特别是在模块化设计、类型守卫和组合式API类型推导等场景中,这种技术组合展现出强大优势。热门的Vue 3工程化方案如模块联邦与类型共享,配合monorepo架构,可有效解决多仓库项目的类型同步问题。对于中高级开发者而言,掌握TS配置优化如ski

weixin_30634661的博客 330
上一篇: 00-获取Vue源码
下一篇: 01-Vue源码的构建过程解析之scripts/build.js
nothing_more_than
博客等级 码龄18年 75粉丝 125原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值