讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

无需 npm:Vue 3 应用中直接通过 unpkg 引入 Pinia 的教程

老萱小哥_9405

老萱小哥_9405

发布时间:2025-11-20 22:13:01

|

573人浏览过

|

来源于php中文网

原创

无需 npm:vue 3 应用中直接通过 unpkg 引入 pinia 的教程

本教程详细介绍了如何在不使用 npm 的情况下,通过 CDN(unpkg)直接将 Pinia 状态管理库导入到 Vue 3 浏览器应用程序中。文章提供了正确的 unpkg URL 和导入代码示例,并指导读者如何查找其他浏览器可用的包,适用于快速原型开发或轻量级项目。

引言:在浏览器环境中集成 Pinia

在某些开发场景中,例如快速原型验证、简单的独立页面应用或教学示例,开发者可能希望直接在浏览器中使用 Vue 3 和其生态系统库,而无需复杂的构建工具链(如 Vite、Webpack)或 Node.js 环境下的 npm/yarn 包管理。然而,对于像 Pinia 这样的状态管理库,其官方文档通常侧重于 npm 安装方式,使得直接通过 CDN 引入的路径变得不那么显而易见。本文旨在解决这一痛点,提供一个清晰的指南,演示如何在纯浏览器环境中,利用 unpkg CDN 服务将 Pinia 引入 Vue 3 应用。

通过 unpkg 引入 Pinia

unpkg 是一个内容分发网络(CDN),它能够提供 npm 上几乎所有包的浏览器优化版本。这意味着你可以直接通过 URL 在 <script type="module"> 标签中导入这些模块。对于 Pinia,其核心模块也可以通过 unpkg 获取。</script>

正确的 Pinia 导入 URL 如下:

立即学习“前端免费学习笔记(深入)”;

import { createPinia, defineStore } from 'https://unpkg.com/pinia@2.1.7/dist/pinia.esm-browser.js';

说明:

  • https://unpkg.com/pinia@2.1.7/:指定了 Pinia 包的名称和版本号。建议始终指定版本号(例如 @2.1.7),以确保代码的稳定性,避免未来 Pinia 版本更新可能带来的兼容性问题。
  • dist/pinia.esm-browser.js:这是 Pinia 专为浏览器环境优化的 ES 模块版本。它支持 import 语句,并且通常比 index.js 或其他 CommonJS 版本更适合直接在浏览器中使用,因为它能够利用浏览器的模块加载机制。

完整示例代码

以下是一个完整的 HTML 文件示例,展示了如何在一个 Vue 3 应用中,通过 unpkg 导入并使用 Pinia 来管理一个简单的计数器状态,全程无需 npm。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue 3 + Pinia (无 npm) 示例</title>
  <style>
    body { font-family: sans-serif; margin: 20px; }
    #app { border: 1px solid #eee; padding: 20px; border-radius: 8px; max-width: 400px; margin: 0 auto; text-align: center; }
    button { padding: 8px 15px; margin: 5px; cursor: pointer; border: 1px solid #ccc; border-radius: 4px; background-color: #f0f0f0; }
    button:hover { background-color: #e0e0e0; }
    h1 { color: #42b883; }
    p { font-size: 1.1em; }
  </style>
</head>
<body>
  <div id="app">
    <h1>{{ message }}</h1>
    <p>当前计数: {{ counter.count }}</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/skill11499" title="cn-json-diff"><img
                                                                                src="https://img.php.cn/upload/skill/001/246/273/6adaf20cf0281539.jpg" alt="cn-json-diff" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/skill11499" title="cn-json-diff">cn-json-diff</a>
                                                                        <p>比较两个 JSON 文件并显示差异。支持嵌套结构、数组及值变更。纯 Python 标准库实现,无需 API 密钥。</p>
                                                                </div>
                                                                <a href="/xiazai/skill11499" title="cn-json-diff" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div>
    <button @click="counter.increment()">增加</button>
    <button @click="counter.decrement()">减少</button>
    <p>双倍计数: {{ counter.doubleCount }}</p>
  </div>

  <script type="module">
    // 导入 Vue 3 核心模块
    import { createApp, ref, computed } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
    // 导入 Pinia 核心模块
    import { createPinia, defineStore } from 'https://unpkg.com/pinia@2.1.7/dist/pinia.esm-browser.js'; // 建议指定版本

    // 1. 定义一个 Pinia Store
    const useCounterStore = defineStore('counter', {
      state: () => ({
        count: 0
      }),
      getters: {
        doubleCount: (state) => state.count * 2
      },
      actions: {
        increment() {
          this.count++;
        },
        decrement() {
          this.count--;
        }
      }
    });

    // 2. 创建 Vue 应用
    const app = createApp({
      setup() {
        const message = ref('Vue 3 + Pinia (无 npm) 示例');

        // 3. 在 setup 中使用 Pinia Store
        // 一旦 Pinia 被安装到 Vue 应用中,可以直接调用 useStore() 函数获取 store 实例
        const counter = useCounterStore(); 

        return {
          message,
          counter
        };
      }
    });

    // 4. 安装 Pinia 到 Vue 应用
    // 必须在挂载 Vue 应用之前调用 app.use(createPinia())
    app.use(createPinia());

    // 5. 挂载 Vue 应用
    app.mount('#app');
  </script>
</body>
</html>

将上述代码保存为 .html 文件,并直接在浏览器中打开,即可看到一个功能完整的 Vue 3 + Pinia 应用,无需任何本地服务器或构建步骤。

如何查找其他 CDN 包

unpkg 不仅适用于 Pinia,也适用于大多数流行的前端库。如果你想知道某个 npm 包在 unpkg 上的可用文件路径,可以使用以下 URL 格式进行浏览:

https://unpkg.com/browse//

例如,要浏览 Pinia 包的文件结构,你可以访问: https://www.php.cn/link/c0c0d016711b9da72bd0de3897b4c9d3

重要提示: 请确保在包名后加上 / 斜杠,否则可能无法正确显示文件列表。通过这种方式,你可以找到特定版本的 dist 目录下的 ES 模块文件(通常以 .esm-browser.js 或 .mjs 结尾),它们是直接在浏览器中 import 的理想选择。

注意事项与最佳实践

尽管通过 unpkg 直接引入库非常便捷,但在实际应用中仍需考虑以下几点:

  1. 适用场景: 这种方法最适合于:
    • 快速原型开发和概念验证。
    • 学习和测试 Vue/Pinia 的基本功能。
    • 构建非常简单的、不涉及复杂构建流程的独立页面应用。
    • 在特定环境下(如某些 CMS 或在线编辑器)插入前端逻辑。
  2. 局限性:
    • 无构建优化: 缺少了 Webpack、Vite 等构建工具提供的代码打包、压缩、Tree Shaking(尽管 ESM 模块本身有一定优化)、热模块替换 (HMR) 等功能。这可能导致加载速度较慢、文件体积较大。
    • 依赖管理: 所有的依赖都需要手动通过 <script type="module"> 导入,管理起来不如 npm 方便,尤其是在项目依赖较多时。</script>
    • 生产环境: 对于大型、复杂的生产级应用,强烈建议使用基于 npm 的构建工具链,以获得最佳的性能、可维护性和开发体验。
  3. 版本控制: 始终建议在 unpkg URL 中指定库的版本号(例如 pinia@2.1.7)。这可以防止 CDN 上库的更新导致你的应用出现意外的兼容性问题或行为变化。
  4. 错误处理: 浏览器中的模块导入错误通常会在控制台中显示,但相比于构建工具提供的详细错误报告,可能不那么直观。

总结

通过 unpkg CDN,开发者可以在不依赖 npm 和构建工具的情况下,轻松地将 Pinia 状态管理库引入到 Vue 3 浏览器应用程序中。这种方法为快速开发、原型验证和学习提供了极大的便利。然而,在决定采用此方法时,应充分权衡其便捷性与大型项目所需的性能优化和复杂依赖管理能力。理解 unpkg 的使用方式,也能帮助你更好地探索和利用前端生态系统中丰富的开源资源。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4896

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1435

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1898

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

10443

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

1040

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3104

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

1649

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

5329

2023.09.21

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn