美文网首页Next.js我爱编程
九、Next.js,发布应用

九、Next.js,发布应用

作者: 小纠结在简书 | 来源:发表于2017-09-05 10:57 被阅读311次

    Next.js是一个新的通用JavaScript框架,它为基于React和服务器的Web应用提供了一个新的可选方案。

    Next.js目前已经开源,https://zeit.co/blog/next

    你遇到过这个问题吗?

    如何部署我的Next.js应用?

    我们还没有讨论过这个问题,但它非常简单明了。

    您可以部署Next.js应用到任何你可以运行node.js的地方。因此,没有任何类型的锁定,即使部署到ZEIT中也非常简单。

    让我们学习部署Next.js应用。

    首先,我们需要一个简单的Next.js应用程序。试着下载下面的示例应用程序:

    git clone https://github.com/arunoda/learnnextjs-demo.git
    cd learnnextjs-demo
    git checkout using-shared-components
    

    你可以执行以下命令:

    npm install
    npm run dev
    

    现在,您可以通过导航到http://localhost:3000来访问该应用程序。

    构建和启动

    首先,我们需要建立Next.js应用于生产。它将为生产生成一组优化的代码。

    为此,只需在package.json添加以下的npm脚本:

    "scripts": {
      "build": "next build"
    }
    

    然后你需要启动Next.js应用在一个端口上。这将执行副渲染和服务页面(用上面的命令构建)。

    为此,只需在package.json添加以下的npm脚本:

    "scripts": {
      "start": "next start"
    }
    

    这将在3000端口启动我们的应用。

    因此,您可以运行以下命令来运行我们的应用程序:

    npm run build
    npm run start
    
    运行两个实例

    现在,我们要运行两个应用程序,通常,我们这样做是为了水平地扩展我们的应用程序。
    首先,对我们的start npm脚本做如下更改:

    "scripts": {
      "start": "next start -p $PORT"
    }
    

    如果你在Windows上,你的启动脚本应该是 next start -p %PORT%.

    现在让我们先来构建我们的应用程序。

    npm run build
    

    然后尝试在自己的终端中运行以下命令:

    PORT=8000 npm start
    PORT=9000 npm start
    

    在Windows上,您需要以不同的方式运行命令。一种选择是将npm模块 cross-env
    安装到你的应用中。
    然后运行 cross-env PORT=9000 npm start 从命令行。

    是否有可能在两个端口上访问我们的应用程序?

    构建一次,运行多个实例

    正如您所看到的,您需要一次构建您的应用程序。然后你可以在任意多的端口上启动它。

    部署到 ▲ZEIT now

    现在我们知道如何构建和y启动Next.js。我们用npm脚本做了所有的事情。因此,您将能够定制它,以使用您最喜欢的部署服务。

    但如果你使用 ▲ZEIT now, 只有一个步骤。

    只需添加以下的npm脚本:

    "scripts": {
      "build": "next build",
      "start": "next start -p 8000"
    }
    

    然后 install now. 然后应用以下命令:

    now
    

    基本上,您运行您的应用程序根目录内"现在"命令。

    在这里,我们提到端口8000作为我们启动应用程序的端口,但是我们在部署到ZEIT时并没有改变它。

    那么,在部署到ZEIT的时候,我们可以在哪个端口访问我们的应用呢?

    ZEIT总是使用443

    实际上,即使你在端口8000上启动你的应用程序,你也可以使用端口443(默认端口为“https”网站)访问它。

    这是ZEIT的一个特点。你只需要在你喜欢的任何端口上启动你的应用程序。ZEIT现在将把它映射到端口443。

    构建您的应用程序在本地

    ▲ZEIT now 将检测npm构建脚本,并在它的构建基础结构中构建它。

    但是,并不是所有的主机供应商都有类似的东西。
    在这种情况下,你可以在本地创建你的应用:

    npm run build
    

    然后将应用程序部署到该应用程序中.next目录。

    使用定制服务器部署应用程序

    我们刚刚部署的应用程序不使用自定义服务器代码。但是如果我们有这个,我们怎么能部署它呢?

    因此,请检出以下分支:

    git checkout .
    git checkout clean-urls-ssr
    

    在这一点上,我们使用自定义服务器来运行我们的应用程序,所以在你的应用中加入Express:

    npm install --save express
    
    构建应用程序

    即便如此,你也可以用Next.js来构建你的应用。因此,添加以下的npm脚本:

    "scripts": {
      "build": "next build"
    }
    
    启动应用程序

    我们需要创建自定义服务器代码来说明这是一个生产应用程序,为此,请从我们的server.js中查看这段代码

    const express = require('express')
    const next = require('next')
    
    const dev = process.env.NODE_ENV !== 'production'
    const app = next({ dev })
    const handle = app.getRequestHandler()
    
    app.prepare()
    .then(() => {
      const server = express()
    
      server.get('/p/:id', (req, res) => {
        const actualPage = '/post'
        const queryParams = { title: req.params.id }
        app.render(req, res, actualPage, queryParams)
      })
    
      server.get('*', (req, res) => {
        return handle(req, res)
      })
    
      server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
      })
    })
    .catch((ex) => {
      console.error(ex.stack)
      process.exit(1)
    })
    

    看看下面的一行:

    const dev = process.env.NODE_ENV !== 'production'
    

    因此,我们可以像这样启动我们的应用程序:

    NODE_ENV=production node server.js
    

    因此,我们的“npm start”脚本将如下:

    "scripts": {
       "start": "NODE_ENV=production node server.js"
    }
    

    这就是你要做的。

    最后

    现在,您几乎知道了如何部署Next.js应用。

    您还可以了解更多关于部署的内容 deploying Next.js 从我们的文档。

    本文翻译自:https://learnnextjs.com/basics/deploying-a-nextjs-app

    相关文章

      网友评论

      • knowIt:如何部署到Tomcat中呢?
        小纠结在简书:@knowIt 因为这个是基于前后端同构的,需要做页面静态化,如果像react那样子就没办法静态化的,这个是基于项目的需求来做技术造型的
        knowIt:@小纠结在简书 build好的文件没有index.html文件的,放进WebApps目录下不知道怎么运行,react项目build完后有index.html,是可以直接放进webapps目录下启动Tomcat运行的
        小纠结在简书:如果是用文章所说的方式,就不用部署到tomcat里面了,next.js自动的node.js服务器即可启动build好的文件;如果部署tomcat容器,放到webapp目录即可!

      本文标题:九、Next.js,发布应用

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