harmonyLinkingErrorPlugin.js 1.02 KB
Newer Older
邓晓峰's avatar
邓晓峰 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
const LINKING_ERROR_TAG = 'was not found in';
// build 时会出现 css modules 的引用警告,但这应该是需要忽略的
const CSS_NO_EXPORTS = /\.(css|sass|scss|styl|less)' \(module has no exports\)/;

class HarmonyLinkingErrorPlugin {
  apply(compiler) {
    compiler.hooks.afterCompile.tap('HarmonyLinkingErrorPlugin', (compilation) => {
      if (!compilation.warnings.length) {
        return;
      }
      const harmonyLinkingErrors = compilation.warnings.filter((w) => {
        return (
          w.name === 'ModuleDependencyWarning' &&
          !w.module.resource.includes('node_modules') &&
          w.message.includes(LINKING_ERROR_TAG) &&
          !CSS_NO_EXPORTS.test(w.message)
        );
      });
      if (!harmonyLinkingErrors.length) {
        return;
      }
      compilation.errors.push(...harmonyLinkingErrors);
    });
  }
}
module.exports = async function addHarmonyLinkingErrorPlugin(opts) {
  const { config } = opts;
  config.plugin('harmony-linking-error-plugin').use(HarmonyLinkingErrorPlugin);
};