【问题标题】:merging client and server package.json files into one将客户端和服务器 package.json 文件合并为一个
【发布时间】:2019-07-14 03:14:12
【问题描述】:

我有一个项目,它由服务器端代码(在 nodejs 中)和客户端代码(带有反应)组成。我有单独的 package.json 文件,但我被要求将它们合并为一个。服务器文件位于项目根目录中,客户端与其余客户端代码位于 /client 文件夹中。你能帮我做吗?我可以通过一些修改将客户端文件复制到服务器客户端吗?我找不到任何有用的东西。

package.json:

{
  "name": "curr-calc",
  "version": "1.0.0",
  "description": "currency calc using node.js and react.js",
  "main": "index.js",
  "repository": "",
  "author": "",
  "license": "MIT",
  "scripts": {
    "client": "cd client && yarn start",
    "server": "nodemon server.js",
    "dev": "concurrently --kill-others-on-fail \"yarn server\" \"yarn client\"",
    "lint": "eslint .",
    "babel": "babel --presets es2015 js/server.js -o build/main.bundle.js",
    "test": "yarn --cwd client run test",
    "heroku-postbuild": "cd client && yarn --production=false && yarn run build"
  },
  "dependencies": {
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "express-session": "^1.15.6",
    "node-fetch": "^2.1.2",
    "open": "0.0.5",
    "path": "^0.12.7",
    "prop-types": "^15.6.1",
    "react-widgets": "^4.2.6",
    "redis": "^2.8.0"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-eslint": "^8.0.3",
    "babel-preset-env": "^1.6.1",
    "babel-preset-es2015": "^6.24.1",
    "concurrently": "^3.5.0",
    "eslint": "^4.19.1",
    "eslint-config-standard": "^10.2.1",
    "eslint-config-standard-react": "^5.0.0",
    "eslint-plugin-import": "^2.6.0",
    "eslint-plugin-jest": "^21.3.2",
    "eslint-plugin-node": "^5.1.0",
    "eslint-plugin-promise": "^3.5.0",
    "eslint-plugin-react": "^7.5.1",
    "eslint-plugin-standard": "^3.0.1",
    "fetch-mock": "^6.3.0",
    "node-fetch": "^2.1.2",
    "nodemon": "^1.17.2",
    "react-test-renderer": "^16.3.0",
    "enzyme": "^3.3.0",
    "enzyme-adapter-react-16": "^1.1.1"
  }
}

客户端/package.json:

{
  "name": "curr-calc",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-scripts": "1.1.1"
  },
  "devDependencies": {
    "enzyme": "^3.3.0",
    "enzyme-adapter-react-16": "^1.1.1",
    "fetch-mock": "^6.3.0",
    "react-test-renderer": "^16.3.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "proxy": "http://localhost:5000/"
}

编辑:

我尝试手动合并: 1)我复制了所有依赖项 2)我复制了 srcipts 并重命名了那些重复的并将“cd client &&”添加到每个客户端脚本的开头 3) 我从 clien 文件夹中删除了 package.json、node_modules 和所有 yarn 文件

现在,当我尝试通过 yarn dev 运行应用程序时,我收到:

监听端口 5000 [1] module.js:549 [1] throw err; [1] ^ [1] [1] 错误:找不到模块 '/home/zaba/code/currCalc_react/curr-calc/client/package.json' [1]
在 Function.Module._resolveFilename (module.js:547:15) [1] 在 Function.Module._load (module.js:474:25) [1] 在 Module.require (module.js:596:17) [1] 在需要 (internal/module.js:11:18) [1]
在 getPublicUrl (/home/zaba/code/currCalc_react/curr-calc/node_modules/react-scripts/config/paths.js:34:19) [1] 在对象。 (/home/zaba/code/currCalc_react/curr-calc/node_modules/react-scripts/config/paths.js:61:14) [1] 在 Module._compile (module.js:652:30) [1] 在 Object.Module._extensions..js (module.js:663:10) [1] 在 Module.load (module.js:565:32) [1] at tryModuleLoad (module.js:505:12) 错误发生意外错误:“命令 失败的。 [1] 退出代码:1 [1] 命令:sh [1] 参数:-c cd client && react-scripts start [1] 目录: /home/zaba/code/currCalc_react/curr-calc [1] 输出:[1] ".info If 您认为这是一个错误,请打开包含信息的错误报告 在“/home/zaba/code/currCalc_react/curr-calc/yarn-error.log”中提供。 信息 访问https://yarnpkg.com/en/docs/cli/run 获取有关文档 这个命令。错误发生意外错误:“命令失败。[1] 退出代码:1 [1] 命令:sh [1] 参数:-c yarn start [1] 目录:/home/zaba/code/currCalc_react/curr-calc [1] 输出:[1]"。 info 如果您认为这是一个错误,请使用 中提供的信息 “/home/zaba/code/currCalc_react/curr-calc/yarn-error.log”。信息访问 https://yarnpkg.com/en/docs/cli/run 获取相关文档 命令。 [1] 纱线客户端以代码 1 退出 --> 向其他进程发送 SIGTERM .. [0] yarn server exited with code null error 发生意外错误:“命令失败。退出 代码:1 命令:sh 参数:-c concurrently --kill-others-on-fail \"yarn server\" \"yarn client\" 目录: /home/zaba/code/currCalc_react/curr-calc 输出:“.info 如果你认为 这是一个错误,请使用提供的信息打开错误报告 在“/home/zaba/code/currCalc_react/curr-calc/yarn-error.log”中。

为什么还在寻找client/package.json 文件?那可以是隐藏在某处的 create-react-app 设置吗?

【问题讨论】:

    标签: javascript node.js reactjs package.json


    【解决方案1】:

    我不会将它们合并为一个。它们是两个不同的应用程序,具有不同的依赖关系。我会像这样命名名称:@curr-calc/client 和 @curr-calc/server。

    如果你真的想合并它们,我会手动复制依赖项、devDependencies 和脚本。删除所有重复项(如果是脚本,您需要重命名具有重复键的那些)。

    【讨论】:

    • 这实际上不是我的选择。谢谢你的提示!
    • 我尝试手动合并它们,但这不起作用。纱线抱怨脚本。在这种情况下,使用 create-react-app 生成应用程序是否重要?
    • 纱线到底在抱怨什么?您必须重命名具有相同键的脚本(例如“test”)
    • 我重命名了它们。仍然在尝试通过 yarn dev 运行应用程序时,它会查找 client/package.json。我从客户端文件夹中删除了 package.json、所有纱线文件和节点模块。我用我所做的一切和控制台输出来编辑我的问题。
    • 在您的脚本“客户端”中,您将目录更改为您的客户端文件夹。您必须调整脚本以便调用正确的脚本。在这种情况下,您可以删除“客户端”脚本并直接在您的“开发”脚本中从您的客户端调用重命名的启动脚本。
    【解决方案2】:

    您有几种方法,具体取决于您的目标:

    1. 手动将其与两个项目合并 - 然后您将拥有一个带有单个 package.json 文件的项目。
    2. 由于 json 只是一个普通的 JS 对象,你可以使用类似 lodash 的merge 来实现:

      const server = require("../path/to/server/package.json");
      
      const client = require("../path/to/client/package.json");
      
      const merge = require("lodash/fp/merge");
      
      let merged = merge(server, client);
      

    更多关于 lodash-fp 和 node 的信息可以找到here

    【讨论】:

    • 在这些方法中使用 create-react-app 创建我的应用程序是否重要?我尝试手动合并它们(据我检查所有合并包模块基本相同)但这不起作用 - yarn 对脚本不满意......
    • 没关系,作为一个好的做法,您应该尽快从它那里eject。
    • 怎么做?你能详细说明一下吗?
    • 我在之前的评论中附上了一个链接
    猜你喜欢
    • 2018-02-05
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2017-05-18
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    相关资源
    最近更新 更多