【问题标题】:Why does calling os.tmpDir() produce an error on only some machines?为什么调用 os.tmpDir() 只会在某些机器上产生错误?
【发布时间】:2020-09-21 14:39:21
【问题描述】:

我是一名网络开发学生,我的一个朋友也是。目前,我们正在使用同一课上同一本教科书提供的相同文件。练习的重点是练习 require.js 并探索它可以做什么。我们都采取了相同的步骤来确保下载了正确的包,并且 node 和 npm 版本是最新的。

node index.js 在我的机器上运行时,服务器开始监听::8080 并打印os.tmpDir() is deprecated. Use os.tmpdir() instead. 因为我还是个新手,我不能 100% 确定什么是弃用,但我知道应用程序仍然有效。

node index.js 在她的机器上运行时,她收到一条错误消息,指出os.tmpDir() 不是函数。我可以去localhost:8080,她不能。

我们已经尝试卸载和重新安装节点(稳定版本和最新版本)、比较文件(相同)以及比较软件包版本。不知何故,尽管我们正在使用的东西(除了我们的机器)之间没有任何差异,但我们正在经历两种不同的结果。

有什么建议吗?

错误信息:

C:\Users\Nereida\Documents\Classes\Summer2020\WEB.215\requirejs\node_modules\mach\lib\utils\makeTemporaryPath.js:4
var TMP_DIR = require("os").tmpDir();
                            ^

TypeError: require(...).tmpDir is not a function
    at Object.<anonymous> (C:\Users\Nereida\Documents\Classes\Summer2020\WEB.215\requirejs\node_modules[4mmach[24m\lib\utils\makeTemporaryPath.js:4:29)
    at Module._compile (internal/modules/cjs/loader.js:1200:30)[39m
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1220:10)[39m
    at Module.load (internal/modules/cjs/loader.js:1049:32)[39m
    at Function.Module._load (internal/modules/cjs/loader.js:937:14)[39m
    at Module.require (internal/modules/cjs/loader.js:1089:19)[39m
    at require (internal/modules/cjs/helpers.js:73:18)[39m
    at Object.<anonymous> (C:\Users\Nereida\Documents\Classes\Summer2020\WEB.215\requirejs\node_modules[4mmach[24m\lib\utils\saveToDisk.js:6:25)
    at Module._compile (internal/modules/cjs/loader.js:1200:30)[39m
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1220:10)

【问题讨论】:

  • 如果您能显示更多导致问题的代码会更好。但即兴发挥,我想说你有两个不同版本的 node.js。
  • 目前我们没有相同版本的node.js,但是之前我们有,结果是一样的。我已尽力完全控制安装过程和版本检查,以确保至少这是正确的。不过,感谢权宜之计的反馈!
  • 弃用意味着不鼓励使用某些东西,原因有很多。通常这意味着库的维护者不再支持某些东西,并且可能会在未来的版本中完全删除。
  • 太棒了!感谢您提供这些信息!
  • 这是你的问题,她需要使用os.tmpdir() 和小写的d。正如您所指出的,有一个关于使用带有大写 D 的版本的弃用警告。看起来这已在节点 14 中完全删除。

标签: javascript node.js runtime-error version deprecated


【解决方案1】:

如果你使用 node > 12 可以解决这个问题

固定您的项目以使用 node

echo 'lts/erbium' > .nvmrc 非虚拟机使用

参考:https://github.com/nvm-sh/nvm/blob/master/README.md

【讨论】:

  • 很抱歉投了反对票,但这不是一个有用的答案。虽然它可以工作,但固定到低于当前的 Node 版本而不更新代码是不好的做法,不应该被建议......
【解决方案2】:

答案是a comment from djfdev

这是你的问题,她需要使用带有小写 d 的os.tmpdir()。正如您所指出的,有一个关于使用带有大写 D 的版本的弃用警告。看起来这已在节点 14 中完全删除。

这么简单……这么多时间。你是我的救星djfdev!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多