【问题标题】:chrome extract coverage report as part of build processchrome 提取覆盖率报告作为构建过程的一部分
【发布时间】:2020-06-23 23:07:53
【问题描述】:

在 chrome 中,您可以生成使用的 css 和 js 的覆盖率报告,我如何在构建过程中获取此报告以便自动拆分和加载我的文件? (不与网站进行任何交互的报道报告)。

【问题讨论】:

    标签: javascript css google-chrome build code-coverage


    【解决方案1】:

    根本不是说这种做法有用,我会解释:

    如果您使用动态内容,这将破坏动态元素或动态元素本身的样式。

    我发现处理这个问题的最好方法是使用 parcel js 作为包管理器,并将你的 js 和 scss 正确设置到视图中每个组件的每个 .html 中。这将为每个视图创建一个“虚拟树”样式,并将在每个视图上创建一个插入 js 和 css。当然你可能会得到一些额外的 css 和 js,这取决于你的需要和你的最佳实践。

    • 对于动态内容:如果您在一个可以动态创建元素的视图中,您需要将其 js 和 css 与其余 css 和 js 一起预加载,即使用户不与将动态创建这个其他元素。

    • 对于静态内容:如果您正在使用静态内容,那么 parcel.js 并专门为每个视图编写您的 css 和 js 将是可行的方法。 抓取覆盖范围并采取您现在需要的东西没有多大意义,因为您可以在开发时使用最佳实践。

    如果您仍然想这样做,可以使用puppeteer (npm i puppeteer --save) 进行此操作。

      (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage()
    
      //Start sending raw DevTools Protocol commands are sent using `client.send()`
      //First off enable the necessary "Domains" for the DevTools commands we care about
      const client = await page.target().createCDPSession()
      await client.send('Page.enable')
      await client.send('DOM.enable')
      await client.send('CSS.enable')
    
      const inlineStylesheetIndex = new Set();
      client.on('CSS.styleSheetAdded', stylesheet => {
        const { header } = stylesheet
        if (header.isInline || header.sourceURL === '' || header.sourceURL.startsWith('blob:')) {
          inlineStylesheetIndex.add(header.styleSheetId);
        }
      });
    
      //Start tracking CSS coverage
      await client.send('CSS.startRuleUsageTracking')
    
      await page.goto(`http://localhost`)
      // const content = await page.content();
      // console.log(content);
    
      const rules = await client.send('CSS.takeCoverageDelta')
      const usedRules = rules.coverage.filter(rule => {
        return rule.used
      })
    
      const slices = [];
      for (const usedRule of usedRules) {
        // console.log(usedRule.styleSheetId)
        if (inlineStylesheetIndex.has(usedRule.styleSheetId)) {
          continue;
        }
    
        const stylesheet = await client.send('CSS.getStyleSheetText', {
          styleSheetId: usedRule.styleSheetId
        });
    
        slices.push(stylesheet.text.slice(usedRule.startOffset, usedRule.endOffset));
      }
    
      console.log(slices.join(''));
    
      await page.close();
      await browser.close();
    })();
    

    Source

    【讨论】:

    • 它是一个静态网站,一个html文件和几个css一个js文件,都是我自己写的,没有组件,没有库-即使可能没有必要,我想知道该怎么做它。
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2020-05-05
    相关资源
    最近更新 更多