1

我已将我的 ionic 应用程序从 beta 11 更新到 rc0。所以这意味着我已经从 angular2 rc4 切换到 angular2 stable,从 typescript 1.8 切换到 2 并使用 rollupjs 模块捆绑器。

我已经根据这篇博文配置了 AngularFire2: Ionic 2 RC0、Firebase 3 + AngularFire 2 入门

我无法编译并收到此错误:

汇总:强烈建议不要使用 eval(在 c:\XXX\node_modules\angularfire2\node_modules\firebase\firebase.js 中),因为它会带来安全风险并可能导致缩小问题。 有关更多详细信息,请参阅 https://github.com/rollup/rollup/wiki/Troubleshooting#avoiding-eval

任何人都知道发生了什么以及如何解决这个问题?

4

3 回答 3

5

您可以在汇总配置中禁用此警告:

// rollup.config.js

export default {
  // ...other config...
  onwarn: function (message) {
    if (/Use of `eval` \(in .*\/node_modules\/firebase\/.*\) is strongly discouraged/.test(message)) {
      return;
    }
    console.error(message);
  }
};
于 2016-12-04T01:40:10.363 回答
2

从长远来看,Firebase 的解决方案是直接eval从他们的代码中删除,因为这里实际上没有必要(它只是用于解析 JSON。JSON.parse速度要快得多,而且这些天支持基本上不是问题)。

同时,一种可能的(尽管很老套)解决方法可能是将其转换eval间接 eval的(请参阅故障排除说明以了解差异),使用rollup-plugin-replace

// rollup.config.js
import nodeResolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import replace from 'rollup-plugin-replace';
// ...etc

export default {
  // ...other config...
  plugins: [
    nodeResolve({...}),
    commonjs({...}),
    replace({
      include: 'node_modules/firebase/firebase.js',
      values: {
        'eval(' : '[eval][0]('
      }
    })
  ]
};
于 2016-10-04T11:41:39.300 回答
0

可以通过以下方式抑制警告rollup.config.js

export default {
    onwarn(warning, warn)
    {
        if (warning.code == 'EVAL' && /[\\/]node_modules[\\/]firebase[\\/]/.test(warning.id)) return;

        warn(warning);
    }
};

该模式[\\/]用于捕获 Windows 和 *nix 上的路径分隔符。

于 2021-11-08T19:49:42.320 回答