【问题标题】:Building Autodesk Forge RCDB on Windows 10 fails with node-gyp errors在 Windows 10 上构建 Autodesk Forge RCDB 失败并出现节点 gyp 错误
【发布时间】:2018-10-20 06:40:37
【问题描述】:

在尝试构建 Forge 响应式连接数据库时。我无法在我的 Windows 10 机器上构建此应用程序。我无法成功运行“npm install”。我收到以下错误,如下所示。我最终尝试使用预先配置的“画布”,但它仍然没有让节点应用程序运行。

https://github.com/Autodesk-Forge/forge-rcdb.nodejs

我尝试了这些解决方案都没有成功:

https://github.com/npm/npm/issues/14543

https://github.com/nodejs/node-gyp#on-windows

https://github.com/Automattic/node-canvas/wiki/Installation---Windows

https://github.com/substack/dnode/issues/181

https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245

https://www.npmjs.com/package/canvas-prebuilt

> canvas@1.6.10 install D:\DEVELOPMENT\Autodesk\forge-rcdb.nodejs3\node_modules\canvas
> node-gyp rebuild


D:\DEVELOPMENT\Autodesk\forge-rcdb.nodejs3\node_modules\canvas>if not defined npm_config_node_gyp (node "C:\Users\steck\AppData\Roaming\nvm\v7.7.1\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "node C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
module.js:472
    throw err;
    ^

Error: Cannot find module 'D:\DEVELOPMENT\Autodesk\forge-rcdb.nodejs3\node_modules\canvas\node C:\Users\me\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:425:7)
    at startup (bootstrap_node.js:146:9)
    at bootstrap_node.js:540:3

【问题讨论】:

  • 您是否尝试过使用Chocolatey 安装node-canvas 的那些依赖项?它需要choco install -y python2 gtk-runtime microsoft-build-tools libjpeg-turbo 和用cario 编译的GTK。
  • 您可能需要先安装 Visual Studio 2017。上述软件包之一需要vs-buildtoo-2017。顺便说一句,我的 nodejs 是v6.10.2
  • 1) 我已经安装了 Visual Studio 2017。2) 我已经成功运行了 choco 安装。我什至可以在 node-gyp 之外运行 node-gyp rebuild 并且它成功了。但是,当我运行 npm install 时,它会因上述错误而失败。
  • 您是否尝试过删除node_module 并再次运行npm install?如果它是持久的,请检查节点工具(node-gypwindows-build-tools)的预先要求是否已全局安装在您的计算机上。这对node-canvas 很重要。
  • 下面我提供了我的安装步骤,请大家试试看!

标签: npm-install autodesk-forge node-gyp autodesk-viewer node-canvas


【解决方案1】:

以下是我在安装了 Windows10 的两台不同的 2 台不同计算机上测试的完整安装和设置步骤。

预安装:

  1. Node.js - 使用 v.6.xv8.x
  2. Node.js 全局包:

    • npm-windows-upgrade(link):
      • 此工具会将npm 移动并安装到Windows 的专用文件夹%appdata%
      • 安装步骤:
        • Administrator 的身份打开Powershell 并执行Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
        • npm install --global --production npm-windows-upgrade npm-windows-upgrade 安装工具
        • 在 Powershell 中执行 cmd npm-windows-upgrade --npm-version 5.6.0注意。你可以选择任何你想要的版本,例如 6.0.1
    • windows-build-tools(link):
      • 此工具将安装包node-gyp所需的构建工具。
      • 安装需要一些时间来等待构建工具被下载和安装。如果您可能首先看到一条消息Successfully installed Python 2.7,但您必须等待消息Successfully installed Visual Studio Build Tools. 出现
      • Administrator 的身份打开Powershell 并通过npm install --global --production windows-build-tools 安装工具
    • 节点-gyp(link):
      • 在运行npm install 时,包node-canvas 需要此工具。
      • 正常打开Powershell(比如当前用户)并通过npm install -g node-gyp安装工具
  3. Visual Studio 2017 (link):

    • 这可能是可选的,我只是在我的案例中安装了 VS C++ 功能。
  4. 巧克力 (link):

    • 此工具将使您更轻松地在 Windows 上为包 node-canvas 安装依赖项。
    • Administrator 的身份打开Powershell 并执行Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    • 安装 Chocolatey 后,通过 choco install -y python2 gtk-runtime microsoft-build-tools libjpeg-turbo 安装 node-canvas 依赖项(您可能会看到警告消息 visuallstudiotool-vs2017 installation failed,您可以忽略它。在我的情况下,它不会影响结果 )
  5. 带有 cairo 库的 GTK (link):

    • 此工具是包node-canvas 所需的依赖项。
    • 安装步骤:
      • 下载预编译的 X64 GTK 包here
      • 将所有内容解压到C:\GTK
  6. Mongochef (link):

    • 此工具将使您更轻松地恢复 forge-rcdb 的虚拟数据库。
  7. MongoDB:

    • 您可以按照说明 here 在您的计算机上安装 MongoDB,或者改用 MongoDB PaaS mlab

主要安装:

  1. 下载forge-rcdb的源代码并解压到你喜欢的地方。在我的情况下,我将它放入我的桌面。
  2. 正常打开Powershell(比如当前用户)并将目录更改为源代码的解压缩文件夹。例如,在 Powershell 中执行 cd Desktop\forge-rcdb-nodejs-master
  3. 在源代码文件夹的根目录下运行 cmd npm install。 (编译包node-canvas时可能会看到一些错误信息,但同时会看到'copied xxx.c'、'copied xxx.cpp'等,则可以忽略错误。在我的情况下,运行 forge-rcdb 没有问题。)

配置:

  1. 使用您的编辑器打开config\development.config.js,并将viewer 部分的值更改为:

    viewer: {
          viewer3D: 'https://developer.api.autodesk.com/derivativeservice/v2/viewers/viewer3D.js?v=4.0.1',
          threeJS:  'https://developer.api.autodesk.com/derivativeservice/v2/viewers/three.js?v=4.0.1',
          style:    'https://developer.api.autodesk.com/derivativeservice/v2/viewers/style.css?v=4.0.1'
    }
    
  2. 使用 MongoDB 连接设置更改 config\development.config.js 中的 database 部分。

  3. 通过Mongochef 的导入功能恢复resources/db/devresources/db/prod 中的虚拟数据库数据。

  4. 正常打开Powershell(比如当前用户)并设置以下环境变量:

    $env:NODE_ENV="development"
    $env:HOT_RELOADING="true"
    $env:FORGE_DEV_CLIENT_ID="YOUR_CLINET_ID"
    $env:FORGE_DEV_CLIENT_SECRET="YOUR_CLINET_SECRET"
    

运行项目

  1. 将Powershell的当前目录更改为forge-rcdb的源代码文件夹并输入npm start

  2. 在您喜欢的浏览器中打开http://localhost:3000

疑难解答

  1. 您可能无法在浏览器中加载任何模型。如果您要测试功能,请将resources\models\prod\robot 复制到resources\models\dev\robot。然后,在网络浏览器中导航到http://localhost:3000/configurator 并鼠标单击Kinematics 项目,然后您将看到模型加载到您的屏幕上。

  2. 如果您从浏览器开发控制台看到http://localhost:3000/api/forge/user 的响应显示HTTP EORROR CODE 404,那么您必须检查您的Forge 的CallBack URL 是否用于在Forge Dev Protal 中托管forge-rcdb 的应用程序是http://localhost:3000/api/forge/callback/oauth。 (注意。此配置可以在config\development.config.js 中更改)

    • 之后,您或您的用户必须使用 Autodesk 帐户登录网站才能从 Forge OAuth 服务获取 3 legged 令牌,才能将模型上传到图库页面。
  3. 如果您从http://localhost:3000/api/models/configurator?limit=100&offset=0&search= 的响应中得到一个空数组,则意味着您的MongoDB 集合configurator.models 中没有任何内容。要解决此问题,您可以通过Mongochef 将数据库内容resources\db\dev\configurator.models.json 导入您的MongoDB。 (注意。请参考配置部分的第三步

  4. 如果您无法从网页加载任何列出的模型,这意味着您的resources\models\prodresources\models\dev 以及您的 Forge OSS 存储桶中没有下载的可见气泡。因此,请检查您数据库中的urn 值,您是否在前面提到的这些位置有这些模型。

  5. 如果您发现故障排除第 3 项的主要原因是您没有在 forge-rcdb 中列出的模型,那是因为这些模型是 Autodesk 的私有模型或之前由其他用户自己上传的模型,那不幸的是,可能不会向公众分享。 要解决此问题,您必须将配置部分第 3 步中提到的 MongoDB 集合的示例数据更改为您自己的模型。

希望对你有帮助。

【讨论】:

  • 太完美了。我能够得到它的应用程序。但是现在我有两个问题。 1)“localhost:3000/api/forge/user”给了我一个“404 Not Found”我在developer.autodesk.com创建了一个应用程序,并使用了在将该应用程序创建到 $env:FORGE_DEV_CLIENT_ID ="###" 后找到的客户端 ID/秘密$env:FORGE_DEV_CLIENT_SECRET ="###" 2) 模型已复制到 dev\robot 但单击模型时仍无法加载。
  • 我实际上认为问题可能出在localhost:3000/api/models/… 我只是回来[]。但是,当我在 forge-rcdb.autodesk.io/configurator 看到相同的行为时,我得到了完整的项目列表。
  • 我在上面的回答中添加了一些疑难解答,请看一下。
  • 您是否有类似的步骤将干净的 Linux 机器设置为服务器? Elastic Beanstalk 是否有一个简单的过程,或者你们通常会设置一台新的 linux 机器吗?
  • @EasonKang 只是想知道为什么这些指令没有在存储库的自述文件中列出?
猜你喜欢
  • 1970-01-01
  • 2019-07-29
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多