【问题标题】:nodejs using require js fails on windows container but works on windows hostnodejs 使用 require js 在 windows 容器上失败,但在 windows 主机上工作
【发布时间】:2019-12-25 22:06:10
【问题描述】:

我使用的是 nodejs 11.14.0(并且也用其他版本进行了测试)。 我有一个使用config.jsrequire js 的nodejs 脚本。该代码在 Windows 10 和我需要的大多数其他操作系统版本的 Windows 上运行。 但是,当我尝试在 Windows Docker 容器即作为来宾操作系统)中运行在 Windows 主机操作系统上运行的相同代码时,我收到以下错误 -

C:\TEMP\mypwa>node build.js
fullFilename is: C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\config\default.js

Loading[config]..C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\config\default.js

C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:928
    throw new Error("Cannot parse config file: '" + fullFilename + "': " + e3);
    ^

Error: Cannot parse config file: 'C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\config\default.js': TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
    at Config.util.parseFile (C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:928:11)
    at C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:698:28
    at Array.forEach (<anonymous>)
    at C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:692:14
    at Array.forEach (<anonymous>)
    at Config.util.loadFileConfigs (C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:691:13)
    at new Config (C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:122:27
)
    at Object.<anonymous> (C:\TEMP\bundles\com.foo.studio.viz.core.win64\foowebstudio\node_modules\config\lib\config.js:1752:31)
    at Module._compile (internal/modules/cjs/loader.js:868:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:879:10)

你能帮我解决这个问题吗?

TIA。

【问题讨论】:

    标签: node.js requirejs docker-container windows-container


    【解决方案1】:

    在 docker 中,您可能忘记设置 WORKDIR。所以它无法读取您的配置。

    我使用的是 Linux 操作系统,所以您需要将语法转换为窗口语法。

    【讨论】:

    • 感谢您的回复。 workdir 应该指向什么?应用代码库还是 nodejs 安装位置?
    • 是的,它基于 nodejs。我的 workdir 指向我的项目的根文件夹。
    • 我在构建 docker 镜像时没有任何问题。只有当我从此图像创建容器并尝试运行我的 nodejs 应用程序时。我尝试设置 WORKDIR 但没有帮助。我仍然得到同样的错误
    • 为了更清楚地说明问题,我正在基于此自定义映像执行 docker run,当我在交互式会话中进入正在运行的 docker 容器时,我手动 cd 到 workdir 并尝试运行 nodejs 应用程序。
    【解决方案2】:

    Windows docker 容器中缺少一个默认未设置的环境变量。代码需要这个,因此会出现“未定义”值。 Windows 环境变量是 HOMEPATH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多