如何告诉systemjs忽略导入

时间:2016-05-24 03:40:50

标签: node.js systemjs

这适用于systemjs库,而不是systemjs-builder

我可能会遇到一些边缘情况。但是我试图设置我的前端Web应用程序在命令行中运行它的单元测试。我的设置当前将打字稿构建为寄存器格式,并根据其规范将负载导入到站点中。我目前面临的问题是我的一个依赖项reflect-metadata有一个节点自动检测系统进行require('crypto')调用,这是一个本机节点模块(在npm中不可用)。我收到的错误是:

  

错误:ENOENT:没有这样的文件或目录,打开&U39/path/to/project/node_modules/crypto.js'

我理解这里有很多东西在玩,但我所遵循的行为是让systemjs完全忽略require('crypto')调用并允许它完全不变,因为节点会在运行时正确加载它。

由于我们正在创建的多模块企业应用程序,由于接收Systemjs版本而不是临时commonjs版本的子依赖项,我实际上没有自由将类型脚本导出到commonjs。 (唯一的方法是在我们的私人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
  //   }
  // }
});

1 个答案:

答案 0 :(得分:6)

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

来实现此目的