Npm.require可以'找不到节点模块

Npm.require can't find node module

本文关键字:找不到 节点 模块 require 可以 Npm      更新时间:2023-12-14

我一直在尝试使用Npm.require来获取ldapjs模块并将其用于客户端身份验证,但我收到了以下消息。

 var ldap = Npm.require('ldapjs');
 Error: Cannot find module 'ldapjs'

require不是应该从npm下载包吗?

目前在Meteor中使用NPM包的最佳方式是这个NPM智能包。关于如何使用它的说明在那里非常清楚。基本上,你要做三件事:

1) 安装npm:

mrt add npm

2) 创建包含所需包列表的packages.json文件:

{
    "ldapjs": "0.6.3"
}

3) 通过Meteor.require:使用程序包

var ldapjs = Meteor.require('ldapjs');

不,不是Meteor只会下载一个节点模块,只要它在智能包中声明,带有Npm.depends({...})指令。如果您的代码不是某个智能软件包的一部分,则需要手动安装节点模块。

在Meteor包中使用npm模块需要两件事:

  1. Npm.depends-指定要使用的模块和版本。Meteor的构建系统将下载包并管理其依赖关系
  2. Npm.require-拉入模块,使其在当前范围内可用

请注意,您需要编写一个包来使用npm模块。你可能想通读Meteor的包装文档。

例如,查看Meteor中的日志记录包。它的package.js指定了对npm模块cli color的依赖,它的logging.js文件需要并使用该模块。

主应用程序中的

节点模块

如果您想从主应用程序中使用npm,该怎么办?如果您不想手动安装节点模块(这是一个维护难题),该怎么办?

这可以通过变通方法实现。创建一个填充程序智能包,为主应用程序提供节点模块。将模块导出到主应用程序。

确切的步骤

1.在Meteor应用程序之外创建一个目录npm-shim。我们将在步骤3中使用它。


2.添加以下两个文件:

文件package.js

// npm dependencies are only available for packages. If you have npm 
// dependencies for the main application, you need this workaround:
// Create a shim package to provide the npm dependencies to the main app.
Package.describe({
    summary: "Meteor main application npm dependencies"
});
Npm.depends({
    colors: '0.6.2', 
    // Add more modules as needed.
});
Package.on_use(function(api) {
    api.export("NpmShim"); // Omit this for versions before 0.6.5
    api.add_files("npm.js", "server");
});

文件npm.js

NpmShim = {};
NpmShim.colors = Npm.require('colors');
// Add more modules as needed.


3.编辑smart.json并添加此行:

"npm-shim": { "path": <path to the directory created in step 1> },


4.执行mrt update,然后执行meteor add npm-shim

此解决方法的结果

节点模块可以从Meteor主应用程序中使用,无需手动安装。使用NpmShim.colors而不是Npm.require('colors')

如果您需要更多的模块,则必须将它们添加到package.jsnpm.js中(请参见注释// Add more modules as needed)。