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

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

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       
上面报错的原因是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、线上部署

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐