美文网首页
pm2与serve的单页应用食用指南

pm2与serve的单页应用食用指南

作者: 云彩上的翅胖 | 来源:发表于2017-10-11 19:05 被阅读0次

pm2做进程管理,用serve做静态文件服务器,配置如下:

// pm2.config.js

module.exports = {
    apps: [
        // ...
        {
            name: 'music-app',
            script: 'serve',
            args: '-p 8080 -s build',
        }
    ]
}

问题如下:

  • 直接访问端口可访问,点击链接可访问
  • 刷新页面或直接输入url,404
  • 命令行使用serve直接开启服务无以上问题

关于问题详情大力戳这里

查找问题

执行pm2 show music-app,结果如下:

➜  hehehe git:(master) ✗ pm2 show music-app      
 Describing process with id 1 - name music-app 
┌───────────────────┬──────────────────────────────────────────────────┐
│ status            │ online                                           │
│ name              │ music-app                                        │
│ restarts          │ 69                                               │
│ uptime            │ 3s                                               │
│ script path       │ /usr/local/lib/node_modules/pm2/lib/API/Serve.js │
│ script args       │ -p 8080 -s build                                 │
│ error log path    │ /Users/xixi/.pm2/logs/music-app-error-1.log   │
│ out log path      │ /Users/xixi/.pm2/logs/music-app-out-1.log     │
│ pid path          │ /Users/xixi/.pm2/pids/music-app-1.pid         │
│ interpreter       │ node                                             │
│ interpreter args  │ N/A                                              │
│ script id         │ 1                                                │
│ exec cwd          │ /Users/xixi/work/hehehe                       │
│ exec mode         │ fork_mode                                        │
│ node.js version   │ 8.6.0                                            │
│ watch & reload    │ ✘                                                │
│ unstable restarts │ 0                                                │
│ created at        │ 2017-10-11T10:07:33.119Z                         │
└───────────────────┴──────────────────────────────────────────────────┘

emmmm,注意script path,显然执行的不是我们要的serve啊。
摔!

为什么会这样

原因在这里:戳我!
pm2从2.4.0版本后可以直接开启一个静态文件服务器了,听起来很美,但是!!!
它开启静态服务器的指令也叫serve,所以我们并没有能够用想要的nodejsserve包开启服务器,而是使用了pm2内置的功能。
由于内置的静态文件服务功能并没有针对单页应用做优化,因此会出现上述问题。

两个解决方案

  • 直接指定nodejsserve包可执行文件的路径:
// pm2.config.js

const path = require('path')

module.exports = {
    apps: [
        // ...
        {
            name: 'music-app',
            script: path.resolve(__dirname, './node_modules/serve/bin/serve.js'),
            args: '-p 8080 -s build',
        }
    ]
}
  • 给全局的nodejsserve包取一个别名,比如修改.bashrc

然后执行pm2 show music-app,结果如下:

➜  hehehe git:(master) ✗ pm2 show music-app                                  
 Describing process with id 1 - name music-app 
┌───────────────────┬────────────────────────────────────────────────────────────┐
│ status            │ online                                                     │
│ name              │ music-app                                                  │
│ restarts          │ 0                                                          │
│ uptime            │ 8s                                                         │
│ script path       │ /Users/xixi/work/hehehe/node_modules/serve/bin/serve.js │
│ script args       │ build/ -s -p 3030                                          │
│ error log path    │ /Users/xixi/.pm2/logs/music-app-error-1.log             │
│ out log path      │ /Users/xixi/.pm2/logs/music-app-out-1.log               │
│ pid path          │ /Users/xixi/.pm2/pids/music-app-1.pid                   │
│ interpreter       │ node                                                       │
│ interpreter args  │ N/A                                                        │
│ script id         │ 1                                                          │
│ exec cwd          │ /Users/xixi/work/hehehe                                 │
│ exec mode         │ fork_mode                                                  │
│ node.js version   │ 8.6.0                                                      │
│ watch & reload    │ ✘                                                          │
│ unstable restarts │ 0                                                          │
│ created at        │ 2017-10-11T10:11:23.846Z                                   │
└───────────────────┴────────────────────────────────────────────────────────────┘

可以看到script path已经是我们想要的路径,问题解决。

相关文章

  • pm2与serve的单页应用食用指南

    坑 用pm2做进程管理,用serve做静态文件服务器,配置如下: 问题如下: 直接访问端口可访问,点击链接可访问 ...

  • nodejs之pm2命令

    pm2的安装与应用 npm install -g pm2 启动进程/应用 pm2 start bin/www 进程...

  • 单页应用

    什么是单页应用 单页Web应用,就是只有一张Web页面的应用。 单页应用的优势 单页应用的缺点 开发框架 代码隔离...

  • 单页应用与多页应用

    一、单页应用 利用Vue开发的应用是单页面应用,在url变化时,js会感知到,然后动态地将当前页面上的内容清除...

  • 第一章 React 介绍

    本章内容 多页应用开发模式的缺点 单页应用开发模式的优点 单页应用开发模式的主要问题 React 如何解决单页应用...

  • vue-router考察问题

    单页应用和多页应用的区别 多页应用MPA单页应用SPA应用组成由多个完成页面构成一个外部显示的页面 + 多个局部页...

  • PM2介绍和使用

    1、PM2是什么 PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。我们都知道nodejs是单...

  • 单页应用

    单页应用是什么? 单页应用又称 SPA(Single Page Application)指的是使用单个 HTML ...

  • 前端性能优化

    优化向:单页应用多路由预渲染指南 Ajax 技术的出现,让我们的 Web 应用能够在不刷新的状态下显示不同页面的内...

  • 单页App开发(重要的JS语法)

    一、单页应用历史 什么是单页应用? 所谓单页应用,简称SPA,指的是在一个页面上集成多种功能,甚至整个系统就只有一...

网友评论

      本文标题:pm2与serve的单页应用食用指南

      本文链接:https://www.haomeiwen.com/subject/tftgyxtx.html