【问题标题】:Node-Red custom node_modules locationNode-Red 自定义 node_modules 位置
【发布时间】:2019-07-01 05:22:23
【问题描述】:

我在我的 Express.js 应用程序中使用 node-red,就像这样 https://nodered.org/docs/embedding。当像这样嵌入时 node-red 无法从 npm 加载新节点。

问题是在 settings.js 中定义自定义用户目录时,例如userDir: 'node-red-data/' Node-red 将加载的节点添加到 node_modules 内的此文件夹中。

所以我有两个 node_modules 文件夹:

myapp/node_modules => this is containing node-red
myapp/node-red-data/node_modules => this is containing node-red extra nodes

node-red 无法在myapp/node-red-data/node_modules 侧加载模块的一些原因

有什么解决办法吗?

【问题讨论】:

  • 你能创建一个显示问题的最小测试用例吗?另外,您使用的是什么版本的 NodeJS、npm 和 Node-RED?
  • 看起来问题是相对路径。仍在调试它,但是将 userDir 更改为 absolutepath 会使事情变得更好。
  • 编辑问题以包括您如何创建设置对象

标签: node.js npm node-red npm-link


【解决方案1】:

问题出在设置文件上。

我在用户目录中的设置:

var settings = {
    httpAdminRoot: '/admin',
    httpNodeRoot: '/ap',
    nodesDir: '/nodes',
    flowFile: "flows.json",
    userDir: './data/'
}

正确的设置:

var path = require('path');
var dir = path.dirname(__filename);
var settings = {
    httpAdminRoot: '/admin',
    httpNodeRoot: '/ap',
    nodesDir: dir + '/nodes',
    flowFile: "flows.json",
    userDir: dir+'/data/'
}

所以添加静态路径到用户目录和节点目录使其工作

【讨论】:

    【解决方案2】:

    我也有类似的问题。
    我使用了 process.execPath

    userdir = path.resolve(process.execPath,'..'); //better that __dirname; 
    

    因为编译应用时目录不同。

    // Create the settings object - see default settings.js file for other options
    var settings = {
        verbose: true,
        httpAdminRoot:"/admin",
        httpNodeRoot: "/",
        userDir: userdir, // problem with dir...
        flowFile: 'flows.json',
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多