diff --git a/src/plugin.js b/src/plugin.js index 481e0d2..2d04f8f 100644 --- a/src/plugin.js +++ b/src/plugin.js @@ -87,6 +87,9 @@ export default postcss.plugin( key = decl.params.replace(/["']/g, ''); } + // Webpack interop + key = key.replace(/^~/, ''); + if (mapping.has(key)) { // eslint-disable-next-line no-param-reassign decl.params = `'${mapping.get(key)}'`; diff --git a/tap-snapshots/test-plugin.js-TAP.test.js b/tap-snapshots/test-plugin.js-TAP.test.js index 22e4c11..69fa89a 100644 --- a/tap-snapshots/test-plugin.js-TAP.test.js +++ b/tap-snapshots/test-plugin.js-TAP.test.js @@ -24,3 +24,12 @@ exports[`test/plugin.js TAP plugin() - simple module - should replace normalize. @import 'https://unpkg.com/normalize.css@8/normalize.css'; ` + +exports[`test/plugin.js TAP plugin() - webpack module - should replace normalize.css with CDN URL > webpack example 1`] = ` + + @import 'https://unpkg.com/normalize.css@8/normalize.css'; + @import 'https://unpkg.com/normalize.css@8/normalize.css'; + @import 'https://unpkg.com/normalize.css@8/normalize.css'; + @import 'https://unpkg.com/normalize.css@8/normalize.css'; + +` diff --git a/test/plugin.js b/test/plugin.js index 933da5a..a2d31b2 100644 --- a/test/plugin.js +++ b/test/plugin.js @@ -10,6 +10,12 @@ const advanced = ` @import url("normalize.css"); @import "normalize.css"; `; +const webpack = ` + @import '~normalize.css'; + @import url(~normalize.css); + @import url("~normalize.css"); + @import "~normalize.css"; +`; /* * When running tests on Windows, the output code get some extra \r on each line. @@ -66,6 +72,22 @@ tap.test( } ); +tap.test( + 'plugin() - webpack module - should replace normalize.css with CDN URL', + async (t) => { + const { css } = await postcss( + plugin({ + imports: { + 'normalize.css': 'https://unpkg.com/normalize.css@8/normalize.css', + }, + }) + ).process(webpack, { from: undefined }); + + t.matchSnapshot(clean(css), 'webpack example'); + t.end(); + } +); + tap.test( 'plugin() - import values is an Array - should use the first entry in the Array', async (t) => {