将现有Express节点应用程序发布到静态站点的最简单方法?

时间:2017-06-19 20:27:57

标签: javascript node.js express heroku static

通过 create-react-app 几乎专门用 React 工作,我已经非常被宠坏了,它有一个npm的构建实用程序,它使我的项目部署到静态网站托管超级简单(github页面/激增),最后只给我原始的html / css / js。

但最近有一位朋友找我,无论他在哪所学校,他都教过他如何使用 Express 编写应用程序,但没有关于如何部署它们的内容。我暂时在Heroku上获得了他的代码,但他可能只用静态托管更好(因为该网站非常简单,只使用express for routing / features没有服务器端代码或交互)

有什么像create-react-app的快递构建功能吗?这种非常简单的事情绝对不需要整个节点服务器的开销。

2 个答案:

答案 0 :(得分:1)

我认为你可能会混淆一些事情,所以让我们从一开始就确保我们使用相同的定义。

节点是一个JavaScript引擎,由V8引擎(专为Chrome构建)提供支持。它基本上是一个JavaScript解释器。

Express 是一个构建于Node之上的软件包,它基于Node的http库构建。它是(一个)Node与nginxapache的等价物。

Heroku 是一个基于云的Web主机,它具有动态扩展的能力(如AWS,它建立在它之上)。

说“Express不需要一个完整的节点服务器”并没有多大意义。他只需要一台可以运行Node应用程序的服务器。节点服务器的大小可以变化,实际上他可能不需要非常大的。

Heroku可能是一个非常合适的主人。他不必使用缩放或任何东西,在那里部署Node应用程序相当容易。

许多其他流行的主机也可以支持Node。如果他们为您提供终端访问权限和安装应用程序的能力,他们几乎可以肯定。

据我所知,没有任何类似create-react-app的程序会启动express应用的新实例。这可能是因为他们设置起来非常简单。只有两个文件足以支持一个简单的快递应用:package.json和您的快速文件(我将其命名为index.js

的package.json:

{
   "name": "my-app",
   "dependencies": {
     "express": "latest"
   }
}

index.json:

const express = require('express');

const app = express();

app.get('/', (req, res) => res.send('<h1>Hello World</h1>').end());

app.listen(8888, () => console.log('Listening on port 8888'));

将其部署到任何可以运行Node并运行命令npm install; node index.js的服务器上,将启动它运行。

很多时候,您实际上会创建一个express服务器来提供您的Web应用程序,通常用React编写(这是我每天工作的场景)。 create-react-app只是一种快速设置项目的方法,该项目在结构上相当自以为是,但不是使用React的唯一方法。

(从技术上讲,你可以在没有package.json的情况下离开,但你必须在服务器上手动运行npm install express,这真的很奇怪,所以不要这样做)

答案 1 :(得分:1)

我在非常简单的网站上有同样的感觉,所以我已将我的express申请转移到web-boost方法,该方法在引擎盖下使用相同的快递。

您唯一需要做的就是创建web-boost.json配置文件,看起来像

{
  "routes": {
    "/": {
      "view": "index.twig",
      "vars": {
        "title": "Home page",
        "greeting": "Hello world!"
      },
      "assets": {
        "js/index.min.js": [
          "js/index.js"
        ]
      }
    },
    "/user": {
      "view": "user.twig",
      "vars": {
        "title": "User's page",
        "greeting": "Hi John Doe!"
      },
      "assets": {
        "css/user.min.css": [
          "styles/bootstrap.min.css",
          "styles/user.scss"
        ]
      }
    }
  }
}

然后使用wb-compile CLI命令将动态应用程序转换为静态应用程序。

P.S。之后我刚刚将静态页面部署到AWS.S3