如果我有应用程序的源代码以及 macOS 和 Windows 安装程序,我如何才能找到用于构建应用程序的 Node.js 版本?

Posted

技术标签:

【中文标题】如果我有应用程序的源代码以及 macOS 和 Windows 安装程序,我如何才能找到用于构建应用程序的 Node.js 版本?【英文标题】:if I have source code and macOS and Windows installers for an app, how can I find what version of Node.js was used to build the app? 【发布时间】:2020-08-22 05:15:44 【问题描述】:

我需要构建一个新版本的 javascript Node.js 应用程序。我有该应用早期版本的源代码以及 macOS 和 Windows 安装程序。

我怎样才能找到 Node.js 的哪个版本用于构建以前版本的应用程序,以便我可以使用相同的Node.js 版本来构建我的新版本的应用程序?

我了解在构建 macOS 版本和 Windows 版本时,Node.js 的版本可能不同。理想情况下,我想知道每个平台使用的Node.js 的哪个版本,但如果我能获得至少一个就足以满足我的需求。

更新: 包.json:


  "name": "LiteracyStarter",
  "description": "Literacy Starter",
  "version": "0.60.1",
  "activated": true,
  "private": true,
  "main": "./build/LiteracyStarter.html",
  "nodejs": true,
  "chromium-args": "--disable-web-security",
  "window": 
    "toolbar": true,
    "width": 1260,
    "height": 750,
    "icon": "./images/LiteracyStarterIcon.png",
    "show": false
  ,
  "dependencies": 
    "archiver": "^2.1.1",
    "arraybuffer-to-buffer": "0.0.4",
    "babel-plugin-transform-object-rest-spread": "^6.23.0",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-polyfill": "^6.23.0",
    "cf-encrypt": "^1.0.0",
    "cli-spinner": "^0.2.6",
    "co": "^4.6.0",
    "co-fs": "^1.2.0",
    "co-fs-extra": "^1.2.1",
    "d3-dsv": "^1.0.7",
    "decompress-zip": "^0.3.0",
    "dexie": "^1.5.1",
    "esrever": "^0.2.0",
    "form-data": "^2.2.0",
    "fs-extra": "^0.23.1",
    "fs-extra-promise": "^1.0.1",
    "fstream": "^1.0.11",
    "image-size": "^0.3.5",
    "is-online": "^5.2.0",
    "jssha": "^2.3.1",
    "jszip": "^2.6.1",
    "lodash": "^3.10.1",
    "markdown-it": "^8.3.1",
    "memoizejs": "^0.1.1",
    "moment": "^2.18.1",
    "parse-error": "^0.2.0",
    "portscanner": "^1.2.0",
    "promise-alert": "^0.1.1",
    "promisify-node": "^0.4.0",
    "pseries": "^1.0.3",
    "quill": "^0.20.1",
    "react": "^15.6.1",
    "react-addons-perf": "^15.4.2",
    "react-dom": "^15.6.1",
    "read-json-stream": "^1.1.0",
    "redux": "^3.7.2",
    "request": "^2.81.0",
    "rimraf": "^2.6.1",
    "rmrf-promise": "^1.1.0",
    "simple-sort": "^0.1.2",
    "socket.io": "^1.7.4",
    "socket.io-client": "^1.7.4",
    "socket.io-stream": "^0.9.1",
    "superagent": "^1.8.5",
    "sweetalert": "^1.1.3",
    "system-font-families": "^1.0.0",
    "ttfinfo": "^0.2.0",
    "unzip": "^0.1.11",
    "uuid": "^3.1.0",
    "webpack": "^3.8.1",
    "workerjs": "^0.1.1",
  ,
  "optionalDependencies": 
    "appdmg": "^0.4.5"
  ,
  "devDependencies": 
    "babel-cli": "^6.6.5",
    "babel-core": "^6.7.0",
    "babel-loader": "^6.2.4",
    "babel-plugin-syntax-async-functions": "^6.13.0",
    "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-react": "^6.5.0",
    "babel-register": "^6.9.0",
    "colors": "^1.1.2",
    "eslint": "^2.13.1",
    "eslint-plugin-react": "^4.3.0",
    "express": "^4.13.1",
    "grunt": "^0.4.5",
    "grunt-babel": "^6.0.0",
    "grunt-cli": "^1.3.2",
    "grunt-contrib-copy": "^0.8.0",
    "grunt-contrib-cssmin": "^0.12.3",
    "grunt-contrib-requirejs": "^0.4.4",
    "grunt-contrib-uglify": "^0.8.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-nw-builder": "^3.1.0",
    "grunt-sloc": "^0.6.0",
    "grunt-webpack": "^3.0.2",
    "mocha": "^2.2.4",
    "nw-builder": "^3.1.0",
    "react-tools": "^0.13.3",
    "requirejs": "^2.1.17",
    "s3": "^4.4.0",
    "should": "^8.4.0",
    "single-line-log": "^1.1.2",
    "underscore.string": "^3.0.3"
  ,
  "scripts": 
    "start": "cd build && nw .",
    "dev-start": "cd build && NODE_ENV=development nw . --load-extension=../../react-devtools",
    "build": "npm install && bower install && grunt build && cd build && npm install --production",
    "build-native": "node build-native.js",
    "localization-helper": "cd localizationHelper && http-server",
    "code-generator": "node ./code-generator/code-generator.js",
    "generate-docs": "jsdoc app-node -r -d docs-node && jsdoc app-client/js -r -d docs-client",
    "watch-node": "babel app-node --watch --out-dir build/app-node",
    "watch-client": "webpack --watch --progress",
    "watch-all": "grunt watch",
    "compile-setup-scripts": "node compile-setup-scripts.js",
    "comment": "For node 10.x, we have to add git-core to the PATH when we run win-complete-build.  See https://github.com/appveyor/ci/issues/2420 for an example.",
    "win-complete-build": "PATH=%PATH%;C:\\Program Files\\Git\\mingw64\\libexec\\git-core && npm run build && npm run build-native && npm run compile-setup-scripts",
    "test-sy-utils": "mocha --compilers js:babel-register ./test/sy-utils-tests.js",
    "test-flashcards": "mocha --compilers js:babel-register ./test/flashcard-generator-tests.js",
    "build-native-linux": "cd build-native/LiteracyStarter/linux64/ && node-deb -- **"
  ,
  "cutoffDate": "",
  "preLiteracyVersion": "0.20.2",
  "id": "47479c35-18d9-4265-ad85-af5a73080450"


【问题讨论】:

为什么在这种情况下需要 Node.js 版本?为什么你不能只使用任何有效的 Node 版本?节点是否也捆绑为应用程序的一部分? 升级到新版本的 Node 可能会破坏应用程序中的某些内容。我宁愿现在避免对应用程序中的所有内容进行彻底的手动重新测试(它很大而且很复杂)。 Node.js 向后兼容。只要您的源代码中有package.json,其中包含所有正确的版本。这应该不是 NodeJS 版本的问题 Node.js 确实弃用了 API 并最终将其删除(例如,nodejs.org/api/deprecations.html)。我担心我们的代码可能使用了现在已被删除的 API,或者可能依赖于 Node.js 中的错误,该错误已在更高版本的 Node.js 中修复。 你能不能发一下你的package.json 至少看看有没有可能的推荐 【参考方案1】:

Node.js 不与应用程序的源代码捆绑在一起。 package.json 可能有一个名为 "engines" 的部分,其中将说明您应该使用的版本。

如果根package.json 没有"engines" 部分,那么某些依赖项可能会说明它们需要使用哪个版本。逐个检查会有点烦人,所以一个好方法就是下载一个版本的 Node 并运行npm install。如果一切正常,那么您知道创建应用程序的 Node 版本很可能是旧版本(我知道这有点乏味)。

您可以寻找的另一件事(但可能没有帮助)是检查源代码文件的创建时间(尤其是 package.json 文件),并找到大约在那个时间发布的 Node 版本.这不会像第一种方法那样准确,但它会给你一个 Node 的工作版本。

归根结底,最好使用最新版本(或最新的 LTS 版本),因为它们附带所有最新的安全补丁和改进。

【讨论】:

以上是关于如果我有应用程序的源代码以及 macOS 和 Windows 安装程序,我如何才能找到用于构建应用程序的 Node.js 版本?的主要内容,如果未能解决你的问题,请参考以下文章

解决macOS快速删除Wi-Fi连接记录的方法,速看

通过二维码在WindowsmacOSLinux桌面和移动设备之间传输文件

最新的 macOS 版本 10.15.4 声称代码签名对客户无效

MacOS配置网络命令

Android Studio – 在 Mac OS 上通过 Wi-Fi 运行和调试构建 [重复]

地表最强:iOS安全黑宝书中文版来袭