nuxt3搭建和部署

news/2024/7/8 15:26:40 标签: 前端, nuxt

Nuxt 3是一个基于Vue 3的静态网站生成框架,它提供了高性能、SEO友好的Web应用程序开发体验。Nuxt 3重写了许多核心代码,增加了新功能,如基于Vite的构建系统、改进的路由系统、数据获取和插件系统。它支持TypeScript和多种渲染模式(CSR、SSG、SSR),提供了更好的性能和更快的加载速度。Nuxt 3是Vue 3生态系统中一个完善且强大的解决方案,适用于需要服务端渲染和SEO优化的项目。

1、使用npx nuxi搭建项目

初始化一个名字为portal的项目

npx nuxi@latest init portal
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
Need to install the following packages:
  nuxi@latest
Ok to proceed? (y) y

 WARN  Current version of Node.js (16.15.1) is unsupported and might cause issues.                          
       Please upgrade to a compatible version >= 18.0.0.

 ERROR  Error: Failed to download template from registry: h is not a function       
nuxt3nodejs180_22">上面报错的原因是nodejs版本太低了,使用nuxt3,nodejs的版本最低需要18.0。
npx nuxi@latest init portal

ERROR  Error: Failed to download template from registry: Failed to download https://raw.githubusercontent.com/nuxt/starter/templates/templates/v3.json: TypeError: fetch failed
网络连接失败,需要手动配置一下hosts

打开C:\Windows\System32\drivers\etc\hosts,添加raw.githubusercontent.com与IP的对应关系,我的电脑没有hosts文件,手动创建了一个,内容如下

185.199.109.133 raw.githubusercontent.com
# 185.199.110.133 raw.githubusercontent.com
# 185.199.111.133 raw.githubusercontent.com

我试了一下配置这个IP是可以的185.199.109.133(查找域名对应的IP可以在 https://sites.ipaddress.com/ 网站查询)

>npx nuxi@latest init portal

> Which package manager would you like to use?
> npm
pnpm
yarn
bun
如果执行命令后是这样子,就说明成功了,根据自己情况选择,我选择了默认的npm安装。
>node -v
v18.20.3

本次安装的node版本18.20.3

  "dependencies": {
    "nuxt": "^3.11.2",
    "sass": "^1.77.4",
    "vue": "^3.4.27",
    "vue-router": "^4.3.2"
  }

新建项目时的nuxt版本3.11.2

2、新建必要目录

i.默认情况下仅有public和server目录,我们需要手动创建components、assets和pages目录

组件的用法请查看文档: components/ · Nuxt 目录结构 - Nuxt 中文 (nuxtjs.org.cn)

ii.新建/pages/index.vue

路由无需配置,会根据目录自动配置好

详情请看文档: pages/ · Nuxt 目录结构

iii.修改app.vue的内容

NuxtPage组件用于显示位于pages/目录中的页面, 它是对 Vue Router 的RouterView 组件的封装。

<template>
  <div>
<!--    <NuxtWelcome />-->
    <NuxtPage />
  </div>
</template>

项目运行后访问 localhost:3000 即可看到index.vue页面的内容

3、线上部署

nuxt_build_103">i.先执行nuxt build打包

打包结束后会在项目根目录生成**.output文件夹**,把文件内的内容上传至服务器(假设为portal目录)

ii.使用node命令运行项目

项目默认使用3000端口运行

# 当前在portal目录
ls
nitro.json  public  server
node server/index.mjs
Listening on http://[::]:3000

可以看到项目在3000端口运行

注意:使用node命令运行的项目会随着窗口关闭而关闭,如果想要项目在后台运行需要安装pm2

iii.使用curl检测项目是否运行
curl http:// localhost:3000
<!DOCTYPE html><html><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
................................
iv.配置nginx让域名可以访问网站

在nginx中增加如下配置

server {
		listen 80;
        server_name www.xxxx.run;
        location /{
                        proxy_pass http://localhost:3000; # 反向代理至node服务器
                 }
}

最后执行nginx -s reload 让配置重载一下

现在可以在浏览器使用http:// www.xxxx.run访问刚才的部署的网站了

4、使用pm2部署

i.线上部署需要安装pm2程序

PM2是一个Node.js应用程序的生产进程管理器,可以用来启动、重启、停止和删除应用程序。使用npm install pm2 -g进行全局安装。

pm2 --version
5.4.1
ii.配置ecosystem.config.js

这是一个用于PM2的配置文件,需要放在项目的根目录下(portal/ecosystem.config.js)。文件中需要指定项目的名称、执行模式、实例数量以及启动脚本的路径等信息。

module.exports = {
  apps: [
    {
      name: 'portal',
      port: '3000',
      exec_mode: 'cluster', // 使用集群模式运行
      instances: 'max', // 根据CPU核心数自动分配实例数
      script: './server/index.mjs'
    }
  ]
}

参考: 部署 · Nuxt 入门 - Nuxt 中文 (nuxtjs.org.cn)

iii. 使用PM2启动项目

在项目的根目录下执行pm2 start ecosystem.config.js命令,启动Nuxt3项目。如果一切正常,PM2会显示项目已经在线(online),并且可以通过指定的端口进行访问。

pm2 start ecosystem.config.js 
[PM2][WARN] Applications portal not running, starting...
[PM2] App [portal] launched (2 instances)
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ portal             │ cluster  │ 0    │ online    │ 0%       │ 43.7mb   │
│ 1  │ portal             │ cluster  │ 0    │ online    │ 0%       │ 38.0mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

服务器CPU是两核,于是它启动了两个实例

附:pm2常用命令

  • 启动单个Node.js应用程序:pm2 start app.js
  • 启动并命名应用程序:pm2 start app.js --name="api"
  • 停止单个应用程序:pm2 stop app_name|app_id
  • 停止所有应用程序:pm2 stop all
  • 重启单个应用程序:pm2 restart app_name|app_id
  • 重启所有应用程序:pm2 restart all
  • 删除单个应用程序:pm2 delete app_name|app_id
  • 删除所有应用程序:pm2 delete all
  • 列出所有启动的应用程序:pm2 list
  • 显示应用程序的详细信息:pm2 show app_name|app_id
  • 监视每个应用程序的CPU和内存使用情况:pm2 monit
  • 查看所有应用程序的日志:pm2 logs
  • 查看指定应用程序的日志:pm2 logs app_name|app_id
  • 设置应用程序开机自启动:pm2 startup

如果是nuxt2请查看:https://blog.csdn.net/dan_seek/article/details/102875068


http://www.niftyadmin.cn/n/5537328.html

相关文章

海量设备集中运维,向日葵远程控制赋能农牧产品加工产业链

产业规模越大&#xff0c;单位成本就越低&#xff0c;这是一个广泛存在的商业规律。 在诸多行业中&#xff0c;农牧业的这种“规模效应”尤为明显&#xff0c;这使得在农牧行业内逐渐发展出许多横跨产业链上下游的大型企业集团&#xff0c;业务甚至覆盖相关产业设备的设计与生…

js使用websocket,vue使用websocket,copy即用

新建一个文件 websocket.js // 定义websocket 地址 let socketurlDev "ws://192.000.0.0:8085/websocket/admin/"; //开发环境 let socketurlProd "wss://123456789.cn/prod-api/websocket/admin/"; //正式环境// 重连锁, 防止过多重连 let reconnectLo…

qt 关于大端小端的一个实验 简单实验

1.概要 起因我用滚动是x86电脑&#xff0c;我用一个usort a11a ,我期待转换长的char字符应该是这样的“1aa1”,因为x86是小端的&#xff0c;这也是这个16位 类型的实际内存顺序&#xff0c;但是输出的结果是 “a11a”&#xff0c;难道这环境不是小端&#xff1f;难道qt能智能…

【Unix/Linux】$bash-3.2是什么

bash-3.2 指的是Bourne Again Shell&#xff08;Bash&#xff09;的3.2版本。 Bash是一个广泛使用的Unix shell和命令语言&#xff0c;是GNU项目的一部分&#xff0c;也是许多Linux发行版和Unix系统的默认shell。 以下是一些关于Bash 3.2的要点&#xff1a; 1. 兼容性&#…

---java KMP算法---

对于在一段字符串中查找一段字符串&#xff0c;如果用数组遍历的方法那就效率低下&#xff0c;所以产生了效率更高的KMP算法 KMP算法查只需要遍历一次字符串就可以找出第一次出现的目标字符串 要学的话建议区b站看视频&#xff0c;学着由视频学者比较容易 我这里就提供下我实…

初学vue3与ts:获取组件ref实例

/*** 获取组件ref* param {VueComponentIns} 组件实例* returns 组件ref*/ // eslint-disable-next-line export function useCompRef<T extends abstract new (...args: any) > any>(_: T) {return ref<InstanceType<T>>(); }使用 <a-com ref"a…

echarts实现3D柱状图(视觉层面)

一、第一种效果 效果图 使用步骤 完整实例&#xff0c;copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…

如何在Vue中添加事件监听器

在Vue中添加事件监听器主要有两种方式&#xff1a;在模板中直接添加和使用Vue实例的方法。以下将详细解释这两种方法。 1. 在模板中直接添加 在Vue的模板中&#xff0c;你可以直接在HTML元素上使用v-on指令&#xff08;或其简写形式&#xff09;来监听DOM事件&#xff0c;并在…