如何告诉SystemJS忽略一个导入?

3

这是针对systemjs库而非systemjs-builder的

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

错误:ENOENT:没有此文件或目录,打开'/Users/path/to/project/node_modules/crypto.js'

我理解这里有很多事情,但我想要的行为是让systemjs完全忽略require('crypto')调用,并允许它完全不受影响地通过,因为节点将在运行时正确加载此调用。

由于我们正在创建的多模块企业应用程序,我没有真正自由地将typescript导出到commonjs,因为子依赖项接收Systemjs版本而不是临时的commonjs构建。(唯一的方法是在我们的私有npm dist构建中包含commonjs版本,这远非理想) 以下是我目前使用的system配置,因为我一直在尝试让系统忽略加密库要求。我将其保留在生成上述错误时的确切状态,包括注释,以便您可以看到我尝试过什么。
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个回答

6
为了忽略某个require,您可以在SystemJS配置文件中将其映射到@empty模块。您可以通过添加System.config({ map: { 'crypto': '@empty' } })来实现这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接