百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目

ztj100 2025-03-30 00:20 2 浏览 0 评论

写这篇文章的初衷并不是要大家真的不用node和vscode,说实话前端发展成今天这样,在实际开发中确实离不开node和vscode这类工具了,但往往工具用多了我们自己也成了一个工具人!

这篇文章的缘由

最近在开发wordpress插件的时候,需要在插件中生成一个wordpress网站前端页面,按照wordpress的开发路径,是需要在php代码中来动态拼装页面html代码,然后你会发现整个页面的php代码文件中有:php代码、javascript、html、css,可谓眼花缭乱,大部分逻辑就是php中混合着写javascript,写着很别扭也完全没有啥可读性。

然后发现其实可以换一种实现路径,直接用vue开发出一个html页面,php中直接返回这个html文件就可以了,开发时比较好调试,后期也比较好维护,各种效果功能也都能实现。

我们平时vue、react用多了,离开了框架、node、npm、vscode这些好像就不会写代码了,于是就有了这篇抛弃node和vscode,只依赖电脑自带的记事本工具来开发出一个完整的vue3前端项目。

前端的本质是html

试想一下如果离开了node、webpack、vite、vue-cli…这些工具,你还能开发出一个完整的前端项目吗?

哪怕是日常工作中用vue、react写代码,但我们最终的产物依然是html文件,各种打包工具、编译工具只不过让我们的开发过程更高效,代码更好维护而已。

比如因为某种特殊情况我们拿到的电脑上没法安装任何第三方工具,或者我们想快速实现一个想法、开发出某个功能,如果还是按照正常的开发路径先来安装各种前端环境,然后初始化一个vue项目…等我们做完这些半天、1天就过去了。

想一想没有vue之前我们是怎么开发前端页面的,记事本就可以直接编写出html,浏览器也是电脑自带的能给我们开发调试的天然环境,前端的本质就是编写出一个html而已。

用记事本能开发出vue项目吗?

我们先来看一下一般一个完整的vue项目需要的一些东西:

  • 能使用 vue 的语法开发
  • vue-router 路由管理
  • 引入第三方组件库
  • 全局状态管理
  • 发送http请求

似乎有上面这些东西,我们日常前端开发中要实现的一些功能都能够开发出来了,所以这里我们就以上面的这些为准来实现。

但是平常我们开发vue都是需要先用脚手架初始化出项目,然后 npm install 安装项目需要的依赖,接着 npm run 编译打包让项目运行起来。但靠一个记事本似乎没办法完成这些工作,不过我们这里换一种平常不常用的开发方式来实现,在 vue 官方的文档上也是有说明的,并且还有示例:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
{{ message }}
<script> const { createApp, ref } = Vue createApp({ setup() { const message = ref('Hello vue!') return { message } } }).mount('#app') </script>

就是通过第三方 cdn 直接全局引入 vue,然后我们就可以在一个 html 文件中来用 vue 开发。你可能会觉得上面的示例太简单了,上面还有那么多功能能这样全部实现出来吗?答案是肯定的。

既然 vue 可以通过 cdn 的方式引入,其他的 vue-router、组件库 element-ui、状态管理 vuex、发送请求 axios...也都是可以通过 cdn 的方式来引入使用的,不过像状态管理本身我们就可以用原生的 localStorage、sessionStorage 来代替,发送请求也可以通过原生的 fetch 来实现,所以为了避免引入太多依赖这两个我们就直接用原生支持的来实现就好了。

完整的 vue 项目代码

实现以上功能的完整代码如下,实际就是一个单独的 html 文件,然后我们可以直接复制文件路径到浏览器中打开运行调试的,里面的内容你确实也可以直接通过记事本来打开编辑,保存后刷新下浏览器也就能看到最新的页面效果:





  
  
  cafehaus
  
  <script src="https://unpkg.com/vue@3"></script>
  
  <script src="https://unpkg.com/vue-router@4"></script>
  
  
  
  <script src="https://unpkg.com/element-plus"></script>
  
  <script src="https://unpkg.com/@element-plus/icons-vue"></script>



  
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目 cafehaus
<script> // 1. 创建 vue 实例 const app = Vue.createApp({ data() { return { menuList: [ { title: '首页', icon: 'home-filled', path: '/home' }, { title: '店铺', icon: 'chrome-filled', children: [ { title: '商品', path: '/goods' }, { title: '介绍', path: '/about' }, ] } ], } }, computed: { defaultMenuActive() { const { meta, path } = this.$route if (meta.activeMenu) { return meta.activeMenu } return path } }, methods: { handleNavigate(path) { this.$router.push({ path }) }, // 发送 http 请求获取用户信息 getUserInfo() { this.sendRequest('/user', { userId: '123' }) .then(data => console.log(data)) .catch(error => console.error(error)) }, // 发送请求 fetch 公共方法封装 sendRequest(path, params = {}, method = 'GET') { let url = 'https://cafe123.cn' + path let options = { method: method, headers: { 'Content-Type': 'application/json' } } if (method === 'GET') { const queryParams = new URLSearchParams(params).toString(); if (queryParams) { url += '?' + queryParams } } else if (method === 'POST' || method === 'PUT' || method === 'PATCH') { options.body = JSON.stringify(params) } return fetch(url, options) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`) } return response.json() }) .catch(error => { console.error('fetch error:', error) throw error }) } } }) // 2.1 创建自定义组件对象 const MyComp = { template: `
{{ name }},{{ message }} Click me
`, props: { name: { type: String, default: '' } }, data() { return { message: "我是message" } }, methods: { changeMessage() { this.message = new Date().getTime() } } } const Home = { template: `
home
`, } const About = { template: `
about
`, } const Goods = { template: `
goods
`, } // 2.2 生成路由表 const routes = [ { path: '/home', component: Home }, { path: '/about', component: About }, { path: '/goods', component: Goods }, ] // 2.3 创建 router 实例 const router = VueRouter.createRouter({ history: VueRouter.createWebHashHistory(), routes, }) // 2.4 全局注册自定义组件 app.component('my-comp', MyComp) app.component('home', Home) app.component('about', About) app.component('goods', Goods) // 2.5 使用 vue-router app.use(router) // 3.1 使用 element-ui 组件 app.use(ElementPlus) // 3.2 注册 element-ui 中的图标组件 for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } // 4. 将 vue 应用实例挂载到页面节点上 app.mount('#app') </script>

需要注意的几个地方:

  • 本地用 file 协议在浏览器中打开 html 文件,路由需要用 createWebHashHistory
  • element-ui 组件库的图标组件需要单独引入和注册
  • element-ui 的 menu 菜单组件需要在 computed 中设置下 default-active,否则通过路由跳转或者刷新页面不会保持菜单的选中状态
  • 想要直接在 id 为 app 的 div 下全局使用的组件,都需要自己用 app.component 全局注册,局部组件可以直接定义在对应组件的 components 中

用 node 将 html 部署到服务器上

上面我们开发好的完整 vue 项目其实就是一个 html 文件,在本地我们可以直接在浏览器中打开,但是如果想要给其他人展示效果,那就需要部署到服务器上。

其实要部署到服务器上也很简单,什么 npm、docker、jenkins、express、nginx...这些通通都不需要,只需要依赖 node 就可以了(需要提前在服务器上安装好 node),然后用 node 自带的 http 库就可以启动一个服务器了。

1、进入服务器上新建目录

在服务器中 /data 目录中找个地方新建一个目录,比如我们这里就叫 node-demo

mkdir node-demo

2、新建 index.html 文件

在 node-demo 目录下新建 index.html 文件

# 1. 进入目录
cd node-demo

# 2. 新建文件
touch index.html

# 3. 编辑文件
vim index.html

# 4. 在键盘上输入 i 进入编辑模式
# 5. 按 ctrl + v 粘贴进去你本地 html 文件中的所有内容
# 6. 按键盘上的 Esc 退出编辑模式
# 7. 输入 :wq 保存文件

3、新建 server.js 文件

在 node-demo 目录下新建 server.js 文件

# 1. 新建文件
touch server.js

# 2. 编辑文件
vim server.js

# 3. 在键盘上输入 i 进入编辑模式
# 4. 按 ctrl + v 粘贴进去下方 server.js 文件中的内容
# 5. 按键盘上的 Esc 退出编辑模式
# 6. 输入 :wq 保存文件

server.js

/**
 * 原生 node 服务器脚本
 *
 * @author cafehaus
 * @date 2025-01-18
 */
const http = require('node:http')
const fs = require('node:fs')
const path = require('node:path')

const hostname = '127.0.0.1'
const port = 3000

const server = http.createServer((req, res) => {
  fs.readFile(path.join(__dirname, 'index.html'), (err, data) => {
    if (err) {
      res.statusCode = 500
      res.setHeader('Content-Type', 'text/plain')
      res.end('Error loading index.html')
    } else {
      res.statusCode = 200
      res.setHeader('Content-Type', 'text/html')
      res.end(data)
    }
  })
})

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

4、启动 node 服务

在当前目录下输入命令:

node server.js

这样就成功在 3000 端口上启动了服务,注意在电脑上访问或分享给别人时,地址中的 127.0.0.1 这个 ip 要换成你服务器的 ip,在浏览器中打开就可以访问到我们开发的这个 vue 前端页面了,是不是很简单,主打的就是一个快速省事效率第一。

本文的目的并不是让大家放弃 node 和 vscode,也不是让大家日常中就真的用上面的方式来开发,上面提供的完整模板基本囊括了前端中常用的一些东西,可以用来帮助我们简单快速地搭建出前端页面,快速实现我们的一些想法。

相关推荐

你不知道的PostgreSQL数据库安装及实现跨库查询PG和Oracle

PG作为近几年最火热的关系型数据,已经被很多开发者所使用,尤其是5G网络普及完毕后,IOT和AI的应用场景下,数据的读写速度要求非常高,MYSQL已经开始不能满足高强度的数据吞吐(这里有争议,这里只是...

从小白到专家 PG技术大讲堂 - Part 3:PG建库与使用

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注...

最全总结,聊聊 Python 数据处理全家桶(PgSQL篇)

来源:AirPython作者:星安果1.前言大家好,我是安果!PgSQL,全称为PostgreSQL,是一款免费开源的关系型数据库相比最流行的Mysql数据库,PgSQL在可靠性、数据完整性...

Excel函数的基本知识和使用,带你迅速掌握函数,可直接套用!

文章最后有彩蛋!好礼相送!...

Excel 小计、总计公式全都能自动计算新增行,套路公式存好

很多同学会觉得Excel单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解Excel的各个知...

Excel查找最后一条记录,3种方法,你会么?

举一个工作中的例子,左边是商品的出库记录,其中的两列数据,现在需要快速找出最后一次出库的时间1、vlookup公式因为每种商品都会有多条出库记录,所以当我们使用vlookup公式时,它只会查找匹配到第...

DeepSeek装进IDEA,全网最全操作指南一篇详解!编程效率大幅提升

在IDEA插件中搜索“通义灵码”,即可获取到AI插件:点击“Install”按钮即可快速安装:安装可能需要一点点时间,等待即可。安装成功以后,在IDEA窗口的右下角,会提示你登录“...

Excel快速合并内容并换行(excel怎么合并后换行)

#一张图记录元旦假期#...

(六)MyBatis面试通关宝典:让你在面试中脱颖而出的关键

一、MyBatis中的工作原理...

Excel数据透视表,逆透视,你会么?

举个工作中的例子来说明,老板发给你左边的表格,让你快速转换成右边的样式,如下所示:1、数据透视表正常情况下,我们都是从右边的数据明细,使用数据透视表,得到左边的结果,简单回顾一一下,我们选中数据区域,...

掌握 Excel 「删除重复项」的4种方法,少做 80%的无用功!

在Excel中,删除重复项是数据清理和整理的常见任务,有多种方法可以实现这一目标。...

一分钟教会你在Excel里面接入DeepSeek,我们一起帮哪吒逆天改命

01...

128G手机还能用两年!微信这新功能突然来了

爽啊,微信最近搞了两个实用性拉满的新功能。不知道大伙有没有碰上过这么个情况。...

Vlookup公式用法大全,建议收藏备用

上班打工人必学的VLOOKUP函数公式,花费2个小时,总结全了,一起来学1、VLOOKUP公式基本用法VLOOKUP公式有4个参数,使用用法:=VLOOKUP(查找值,查找区域,返回第几列,查找方式)...

mariadb数据库使用SQL命令操作表-增删改查

1.DML基础语法DML(DataManipulationLanguage)...

取消回复欢迎 发表评论: