node.js - 如何告诉 systemjs 忽略导入

标签 node.js systemjs

这是针对 systemjs 库,而不是 systemjs-builder

我这里可能有点边缘情况。但我正在尝试设置我的前端 Web 应用程序以在命令行中运行它的单元测试。我的设置当前将 typescript 构建为 注册格式和负载根据其规范导入到站点中。我目前面临的问题是,我的依赖项之一 reflect-metadata 有一个 Node 自动检测系统,该系统进行 require('crypto') 调用,这是一个本地 Node 模块(在 npm 中不可用)。我收到的错误是:

Error: ENOENT: no such file or directory, open '/Users/path/to/project/node_modules/crypto.js'

我明白这里有很多事情在起作用,但我所追求的行为是让 systemjs 完全忽略 require('crypto') 调用并允许它完全不变地通过 Node 将在运行时正确加载它。

由于我们正在创建的多模块企业应用程序,我真的没有自由将 typescript 导出到 commonjs,因为子依赖项接收的是 Systemjs 版本而不是临时 commonjs 构建。 (唯一的方法是在我们的私有(private) npm dist 构建中包含 commonjs 版本,这远非理想)

这是我为系统使用的当前配置,因为我一直试图让系统忽略加密库要求。我已将其保留在生成上述错误时的确切状态、评论和所有内容,以便您可以看到我尝试过的内容。

System.config({
  defaultJSExtensions: true,
  map: {
    'angular2': 'node_modules/angular2',
    'reflect-metadata': 'node_modules/reflect-metadata/Reflect',
    'crypto': 'node_modules/crypto'
  }
  // packages: {
  //   'reflect-metadata': {
  //     format: 'global',
  //     exports: 'Reflect',
  //     defaultExtension: false,
  //     meta: {
  //       '*': {
  //         defaultExtension: false
  //       }
  //     }
  //   }
  // }
  // meta:{
  //   'reflect-metadata/Reflect':{
  //     format: 'global',
  //     exports: 'Reflect',
  //     defaultExtension: false
  //   }
  // }
});

最佳答案

要忽略要求,您可以将其映射到 SystemJS 配置文件中的 @empty 模块。 您可以通过添加 System.config({ map: { 'crypto': '@empty' } })

来实现

关于node.js - 如何告诉 systemjs 忽略导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403990/

相关文章:

javascript - node.js v10.0.0 乱用 gulp

javascript - Angular2 应用程序未在移动设备上显示加载文本

angularjs - 在不写入磁盘的情况下在 gulp 任务之间传递数据

电子邮件中的 HTML 跨站点脚本问题

javascript - 使用函数内检索和更新的数据更新数组

php - AES 加密与 Node 和 PHP 不同

javascript - NodeJS 请求和错误处理

javascript - CSS 与 SystemJS/jspm

typescript - 如何使用 TypeScript 模块 :system export with systemjs in browser

angular - 如何让我的 Angular 2 应用程序处理桶文件导入?