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

Geo*_*nos 5 javascript heroku node.js npm

我有一个包含后端(Node / Express)和前端客户端的存储库,如下所示:

??? build
??? config
??? coverage
?   ??? lcov-report
??? dist
?   ??? static
??? server (node/express server)
?   ??? coverage
?   ??? docs
|   ??? src
?   ??? etc
?   ??? package.json
|
??? src (Vue.js : client code)
?   ??? api
?   ??? assets
?   ??? components
?   ??? router
?   ??? store
??? static
??? package.json
Run Code Online (Sandbox Code Playgroud)

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

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

在同一package.json中同时拥有前端和后端部分的优缺点是什么?

Yon*_*tch 5

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

例如,在我的一个项目中,目录结构如下所示:

|-- package.json (for node/express server)
|-- Procfile
|-- www
    |--client
       |-- package.json (for Ionic/Angular client app)
       |-- ...
    |--server
       |--- ...
    |-- server.js (top level node.js/express script for server)
Run Code Online (Sandbox Code Playgroud)

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

"scripts": {
    "start": "node www/server.js",
    "heroku-postbuild": "cd www/client && npm install && npm run build"
 },
Run Code Online (Sandbox Code Playgroud)

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

 "scripts": {
    "build": "ionic-app-scripts build",
    ...
 },
Run Code Online (Sandbox Code Playgroud)

最后在我的 Procfile 我有:

web: npm start
Run Code Online (Sandbox Code Playgroud)

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

我认为客户端和服务器 package.jsons 应该分开保存,原因有几个。一方面,您真的不希望将所有服务器端代码捆绑到您的客户端中。