当前位置 : 首页 » 互动问答 » 正文

部署完整堆栈节点应用程序npm / package.json体系结构

分类 : 互动问答 | 发布时间 : 2018-04-27 15:46:46 | 评论 : 3 | 浏览 : 55 | 喜欢 : 1

I have 存储库其中包含后端(Node / Express)和前端客户端,如下所示:

├──构建
├──config
├──报道
│└──lcov-report
├──dist
│└──静态
├──服务器(节点/快递服务器)
│├──报道
│├──文档
| ├──src
│├──等
│└──package.json
|
├──src(Vue.js:客户端代码)
│├──api
│├──资产
│├──组件
│├──路由器
│└──店铺
└──静态
└──package.json

我有两个package.json文件,一个用于客户端,另一个用于服务器

  1. 我面对在Heroku等服务上部署的问题,因为他们不希望在一个存储库中有两个不同的npm包(我认为) 。如何用这个设置部署到Heroku(或其他)?
  2. 为应用程序的两个部分都有1个package.json文件会更明智吗?

这两个应用程序的优点和缺点前端和后端部分在同一个package.json中?

回答(3)

  • 1楼
  • 我遇到了类似的问题。我发现最简单的解决方案是有两个独立的Git仓库,一个用于后端,一个用于前端。然后,每个存储库的根文件夹中只有一个package.json

    然后,您可以创建第三个存储库并使用Gi​​t子模块包含后端和前端存储库。您可以使用“组合”存储库来完成开发工作,但是您可以部署单个存储库。这提供了与部署工具的最大兼容性,同时允许您仍然维护一个简单的开发库。

  • 2楼
  • 我有一个类似的问题部署到heroku。 我使用一个名为concurrently的包,通过服务器端package.json中的启动脚本启动客户端和服务器端。我还使用节点的内置代理功能,通过向客户端package.json添加一行来将客户端发送的任何请求发送到服务器。

    顺便说一句,我在客户端使用create-react-app,这就是为什么有些东西看起来有点奇怪。

    我的文件夹结构是

    服务器文件夹
       服务器package.json
       客户文件夹
          客户端package.json
    

    Server package.json:

    “scripts”:{
      “开始”:“同时”npm运行服务器\“\”npm运行客户端\“”,
      “server”:“cross-env NODE_ENV =生产节点server.js”,
      “server-dev”:“nodemon  -  watch ./ --exec babel-node  -  server.js”,
      “client”:“node start-client.js”,
      “dev”:“并发”npm运行server-dev \“\”npm run client \“”,
      “lint”:“eslint”。
     },
    

    客户端package.json:

    “proxy”:“http:// localhost:3001”,
    

    我假设Heroku只是寻找一个启动脚本并运行它。 我认为你的服务器和客户端之间有一定程度的分离是一个好主意,所以我不建议尝试将它全部放在一个package.json

    如果你想要你可以通过搜索关键字:heroku并发服务器客户端

    顺便说一句,如果你这样设置,你不需要CORS

    Cheers

  • 3楼
  • 您可以使用 heroku-postbuild 并在您推送到Heroku的单个git仓库中为您的客户端和服务器维护单独的package.json文件。

    例如,在我的一个项目中,目录结构看起来像这样:

     |  -  package.json(用于节点/快递服务器)
    |  -  Procfile
    |  -  www
        | --client
           |  -  package.json(用于Ionic / Angular客户端应用程序)
           |  -  ...
        | --server
           | --- ...
        |  -  server.js(服务器的顶级node.js / express脚本)
    

    在我的顶层package.json中,我有:

    “scripts”:{
        “开始”:“节点www / server.js”,
        “heroku-postbuild”:“cd www / client && npm install && npm run build”
     },
    

    在我的客户端package.json中,我有:

    “scripts”:{
        “build”:“ionic-app-scripts build”,
        ...
     },
    

    最后在我的Procfile中有:

     web:npm start
    

    通过这个解决方案,Heroku运行我的服务器,并在每个Heroku版本上构建我的客户端代码。

    我认为客户端和服务器package.jsons应该分开保存,原因有很多。首先,你真的不希望所有的服务器端代码捆绑到你的客户端。

相关阅读: