|
8 | 8 | var crypto = require('crypto'); |
9 | 9 | var path = require('path'); |
10 | 10 | var webpack = require('webpack'); |
| 11 | +// eslint-disable-next-line global-require |
11 | 12 | var ReplaceSource = (webpack.sources || require('webpack-sources')).ReplaceSource; |
12 | 13 | var util = require('./util'); |
13 | 14 | var WebIntegrityJsonpMainTemplatePlugin = require('./jmtp'); |
@@ -355,47 +356,77 @@ SubresourceIntegrityPlugin.prototype.registerHwpHooks = |
355 | 356 | } |
356 | 357 | }; |
357 | 358 |
|
358 | | -SubresourceIntegrityPlugin.prototype.thisCompilation = |
359 | | - function thisCompilation(compiler, compilation) { |
360 | | - var afterOptimizeAssets = this.afterOptimizeAssets.bind(this, compilation); |
361 | | - var beforeChunkAssets = this.beforeChunkAssets.bind(this, compilation); |
362 | | - var alterAssetTags = this.alterAssetTags.bind(this, compilation); |
363 | | - var beforeHtmlGeneration = this.beforeHtmlGeneration.bind(this, compilation); |
| 359 | +SubresourceIntegrityPlugin.prototype.thisCompilation = function thisCompilation( |
| 360 | + compiler, |
| 361 | + compilation |
| 362 | +) { |
| 363 | + this.validateOptions(compilation); |
364 | 364 |
|
365 | | - this.validateOptions(compilation); |
| 365 | + if (!this.options.enabled) { |
| 366 | + return; |
| 367 | + } |
366 | 368 |
|
367 | | - if (!this.options.enabled) { |
368 | | - return; |
369 | | - } |
| 369 | + this.registerJMTP(compilation); |
370 | 370 |
|
371 | | - this.registerJMTP(compilation); |
372 | | - |
373 | | - // FIXME: refactor into separate per-compilation state |
374 | | - // eslint-disable-next-line no-param-reassign |
375 | | - compilation.sriChunkAssets = {}; |
376 | | - |
377 | | - /* |
378 | | - * html-webpack support: |
379 | | - * Modify the asset tags before webpack injects them for anything with an integrity value. |
380 | | - */ |
381 | | - if (compiler.hooks) { |
382 | | - if (compilation.hooks.processAssets) { |
383 | | - compilation.hooks.processAssets.tap({ |
384 | | - name: 'SriPlugin', |
385 | | - stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH |
386 | | - }, afterOptimizeAssets); |
387 | | - } else { |
388 | | - compilation.hooks.afterOptimizeAssets.tap('SriPlugin', afterOptimizeAssets); |
389 | | - } |
390 | | - compilation.hooks.beforeChunkAssets.tap('SriPlugin', beforeChunkAssets); |
391 | | - compiler.hooks.compilation.tap('HtmlWebpackPluginHooks', this.registerHwpHooks.bind(this, alterAssetTags, beforeHtmlGeneration)); |
392 | | - } else { |
393 | | - compilation.plugin('after-optimize-assets', afterOptimizeAssets); |
394 | | - compilation.plugin('before-chunk-assets', beforeChunkAssets); |
395 | | - compilation.plugin('html-webpack-plugin-alter-asset-tags', alterAssetTags); |
396 | | - compilation.plugin('html-webpack-plugin-before-html-generation', beforeHtmlGeneration); |
397 | | - } |
398 | | - }; |
| 371 | + // FIXME: refactor into separate per-compilation state |
| 372 | + // eslint-disable-next-line no-param-reassign |
| 373 | + compilation.sriChunkAssets = {}; |
| 374 | + |
| 375 | + /* |
| 376 | + * html-webpack support: |
| 377 | + * Modify the asset tags before webpack injects them for anything with an integrity value. |
| 378 | + */ |
| 379 | + if (compiler.hooks) { |
| 380 | + this.setupHooks(compiler, compilation); |
| 381 | + } else { |
| 382 | + this.setupLegacyHooks(compiler, compilation); |
| 383 | + } |
| 384 | +}; |
| 385 | + |
| 386 | +SubresourceIntegrityPlugin.prototype.setupHooks = function setupHooks( |
| 387 | + compiler, |
| 388 | + compilation |
| 389 | +) { |
| 390 | + var afterOptimizeAssets = this.afterOptimizeAssets.bind(this, compilation); |
| 391 | + var beforeChunkAssets = this.beforeChunkAssets.bind(this, compilation); |
| 392 | + var alterAssetTags = this.alterAssetTags.bind(this, compilation); |
| 393 | + var beforeHtmlGeneration = this.beforeHtmlGeneration.bind(this, compilation); |
| 394 | + |
| 395 | + if (compilation.hooks.processAssets) { |
| 396 | + compilation.hooks.processAssets.tap( |
| 397 | + { |
| 398 | + name: 'SriPlugin', |
| 399 | + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH |
| 400 | + }, |
| 401 | + afterOptimizeAssets |
| 402 | + ); |
| 403 | + } else { |
| 404 | + compilation.hooks.afterOptimizeAssets.tap('SriPlugin', afterOptimizeAssets); |
| 405 | + } |
| 406 | + compilation.hooks.beforeChunkAssets.tap('SriPlugin', beforeChunkAssets); |
| 407 | + compiler.hooks.compilation.tap( |
| 408 | + 'HtmlWebpackPluginHooks', |
| 409 | + this.registerHwpHooks.bind(this, alterAssetTags, beforeHtmlGeneration) |
| 410 | + ); |
| 411 | +}; |
| 412 | + |
| 413 | +SubresourceIntegrityPlugin.prototype.setupLegacyHooks = function setupLegacyHooks( |
| 414 | + compiler, |
| 415 | + compilation |
| 416 | +) { |
| 417 | + var afterOptimizeAssets = this.afterOptimizeAssets.bind(this, compilation); |
| 418 | + var beforeChunkAssets = this.beforeChunkAssets.bind(this, compilation); |
| 419 | + var alterAssetTags = this.alterAssetTags.bind(this, compilation); |
| 420 | + var beforeHtmlGeneration = this.beforeHtmlGeneration.bind(this, compilation); |
| 421 | + |
| 422 | + compilation.plugin('after-optimize-assets', afterOptimizeAssets); |
| 423 | + compilation.plugin('before-chunk-assets', beforeChunkAssets); |
| 424 | + compilation.plugin('html-webpack-plugin-alter-asset-tags', alterAssetTags); |
| 425 | + compilation.plugin( |
| 426 | + 'html-webpack-plugin-before-html-generation', |
| 427 | + beforeHtmlGeneration |
| 428 | + ); |
| 429 | +}; |
399 | 430 |
|
400 | 431 | SubresourceIntegrityPlugin.prototype.beforeChunkAssets = function afterPlugins(compilation) { |
401 | 432 | var chunkAsset = this.chunkAsset.bind(this, compilation); |
|
0 commit comments