将客户端和服务器package.json文件合并为一个

时间:2018-04-03 11:54:07

标签: javascript node.js reactjs package.json

我有一个项目,包括服务器端代码(在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] at   Module.require中的Function.Module._load(module.js:474:25)[1]   (module.js:596:17)[1] at require(internal / module.js:11:18)[1]
  在getPublicUrl   (/home/zaba/code/currCalc_react/curr-calc/node_modules/react-scripts/config/paths.js:34:19)   [1]在Object。   (/home/zaba/code/currCalc_react/curr-calc/node_modules/react-scripts/config/paths.js:61:14)   [1]在Module._compile(module.js:652:30)[1] at   Object.Module._extensions..js(module.js:663:10)[1] at   在tryModuleLoad上的Module.load(module.js:565:32)[1]   (module.js:505:12)错误发生意外错误:"命令   失败。 [1]退出代码:1 [1]命令:sh [1]参数:-c cd client   &安培;&安培; react-scripts启动[1]目录:   / home / zaba / code / currCalc_react / curr-calc [1]输出:[1]"。信息如果   你认为这是一个错误,请打开一个包含这些信息的错误报告   在" /home/zaba/code/currCalc_react/curr-calc/yarn-error.log"中提供。   info有关的文档,请访问https://yarnpkg.com/en/docs/cli/run   这个命令。 error发生意外错误:"命令失败。 [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]纱线服务器退出,代码为空错误发生意外错误:"命令失败。出口   code:1命令:sh参数:-c concurrently --kill-others-on-fail   "纱线服务器\" "纱线客户\#34;目录:   / home / zaba / code / currCalc_react / curr-calc输出:"。 info如果你认为   这是一个错误,请打开包含所提供信息的错误报告   in" /home/zaba/code/currCalc_react/curr-calc/yarn-error.log"。

为什么还在寻找client / package.json文件?可以将create-react-app设置隐藏在某个地方吗?

2 个答案:

答案 0 :(得分:1)

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

如果你真的想合并它们,我只需复制依赖项,devDependencies和脚本即可手动完成。删除所有重复项(如果是脚本,您需要重命名具有重复键的人)。

答案 1 :(得分:0)

根据您的目标,您有几种方法:

  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);
    
  3. 可以找到有关lodash-fp和节点的更多信息here