diff --git a/packages/compat/webpack/package.json b/packages/compat/webpack/package.json index 41b9f8e719..1f69512e3f 100644 --- a/packages/compat/webpack/package.json +++ b/packages/compat/webpack/package.json @@ -38,7 +38,6 @@ "html-webpack-plugin": "npm:html-rspack-plugin@5.5.7", "mini-css-extract-plugin": "2.7.6", "postcss": "8.4.31", - "style-loader": "3.3.3", "terser-webpack-plugin": "5.3.9", "tsconfig-paths-webpack-plugin": "4.1.0", "webpack": "^5.89.0", diff --git a/packages/compat/webpack/src/plugins/css.ts b/packages/compat/webpack/src/plugins/css.ts index 60dedb2a76..8262f2a374 100644 --- a/packages/compat/webpack/src/plugins/css.ts +++ b/packages/compat/webpack/src/plugins/css.ts @@ -78,7 +78,7 @@ export async function applyBaseCSSRule({ rule .use(CHAIN_ID.USE.STYLE) - .loader(require.resolve('style-loader')) + .loader(getSharedPkgCompiledPath('style-loader')) .options(styleLoaderOptions) .end(); } diff --git a/packages/core/src/provider/plugins/css.ts b/packages/core/src/provider/plugins/css.ts index 95e9d125e9..4a307379a7 100644 --- a/packages/core/src/provider/plugins/css.ts +++ b/packages/core/src/provider/plugins/css.ts @@ -69,7 +69,7 @@ export async function applyBaseCSSRule({ rule .use(CHAIN_ID.USE.STYLE) - .loader(require.resolve('style-loader')) + .loader(getSharedPkgCompiledPath('style-loader')) .options(styleLoaderOptions) .end(); diff --git a/packages/core/tests/rspack-provider/plugins/__snapshots__/css.test.ts.snap b/packages/core/tests/rspack-provider/plugins/__snapshots__/css.test.ts.snap index 815e2db29c..1bec87d6f0 100644 --- a/packages/core/tests/rspack-provider/plugins/__snapshots__/css.test.ts.snap +++ b/packages/core/tests/rspack-provider/plugins/__snapshots__/css.test.ts.snap @@ -391,7 +391,7 @@ exports[`plugin-css injectStyles > should use css-loader + style-loader when inj "test": /\\\\\\.css\\$/, "use": [ { - "loader": "/node_modules//style-loader/dist/cjs.js", + "loader": "/packages/shared/compiled/style-loader", "options": { "esModule": false, }, @@ -576,7 +576,7 @@ exports[`plugin-less > should add less-loader and css-loader when injectStyles 1 "test": /\\\\\\.less\\$/, "use": [ { - "loader": "/node_modules//style-loader/dist/cjs.js", + "loader": "/packages/shared/compiled/style-loader", "options": { "esModule": false, }, @@ -1019,7 +1019,7 @@ exports[`plugin-sass > should add sass-loader and css-loader when injectStyles 1 "test": /\\\\\\.s\\(\\?:a\\|c\\)ss\\$/, "use": [ { - "loader": "/node_modules//style-loader/dist/cjs.js", + "loader": "/packages/shared/compiled/style-loader", "options": { "esModule": false, }, diff --git a/packages/shared/compiled/style-loader/index.d.ts b/packages/shared/compiled/style-loader/index.d.ts new file mode 100644 index 0000000000..a2ac5f9bc2 --- /dev/null +++ b/packages/shared/compiled/style-loader/index.d.ts @@ -0,0 +1 @@ +export = any; diff --git a/packages/shared/compiled/style-loader/index.js b/packages/shared/compiled/style-loader/index.js new file mode 100644 index 0000000000..c27269fbf3 --- /dev/null +++ b/packages/shared/compiled/style-loader/index.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={529:(t,e,n)=>{const o=n(161);t.exports=o.default},161:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e["default"]=void 0;var o=_interopRequireDefault(n(17));var r=n(931);var i=_interopRequireDefault(n(80));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}const s=function loader(t){if(this._compiler&&this._compiler.options&&this._compiler.options.experiments&&this._compiler.options.experiments.css&&this._module&&this._module.type==="css"){return t}};s.pitch=function pitch(t){if(this._compiler&&this._compiler.options&&this._compiler.options.experiments&&this._compiler.options.experiments.css&&this._module&&this._module.type==="css"){this.emitWarning(new Error('You can\'t use `experiments.css` (`experiments.futureDefaults` enable built-in CSS support by default) and `style-loader` together, please set `experiments.css` to `false` or set `{ type: "javascript/auto" }` for rules with `style-loader` in your webpack config (now `style-loader` does nothing).'));return}const e=this.getOptions(i.default);const n=e.injectType||"styleTag";const s=typeof e.esModule!=="undefined"?e.esModule:true;const l={};if(e.attributes){l.attributes=e.attributes}if(e.base){l.base=e.base}const a=typeof e.insert==="function"?"function":e.insert&&o.default.isAbsolute(e.insert)?"module-path":"selector";const u=typeof e.styleTagTransform==="function"?"function":e.styleTagTransform&&o.default.isAbsolute(e.styleTagTransform)?"module-path":"default";switch(n){case"linkTag":{const n=this.hot?(0,r.getLinkHmrCode)(s,this,t):"";return`\n ${(0,r.getImportLinkAPICode)(s,this)}\n ${(0,r.getImportInsertBySelectorCode)(s,this,a,e)}\n ${(0,r.getImportLinkContentCode)(s,this,t)}\n ${s?"":`content = content.__esModule ? content.default : content;`}\n\nvar options = ${JSON.stringify(l)};\n\n${(0,r.getInsertOptionCode)(a,e)}\n\nvar update = API(content, options);\n\n${n}\n\n${s?"export default {}":""}`}case"lazyStyleTag":case"lazyAutoStyleTag":case"lazySingletonStyleTag":{const o=n==="lazySingletonStyleTag";const i=n==="lazyAutoStyleTag";const d=this.hot?(0,r.getStyleHmrCode)(s,this,t,true):"";return`\n var exported = {};\n\n ${(0,r.getImportStyleAPICode)(s,this)}\n ${(0,r.getImportStyleDomAPICode)(s,this,o,i)}\n ${(0,r.getImportInsertBySelectorCode)(s,this,a,e)}\n ${(0,r.getSetAttributesCode)(s,this,e)}\n ${(0,r.getImportInsertStyleElementCode)(s,this)}\n ${(0,r.getStyleTagTransformFnCode)(s,this,e,o,u)}\n ${(0,r.getImportStyleContentCode)(s,this,t)}\n ${i?(0,r.getImportIsOldIECode)(s,this):""}\n ${s?`if (content && content.locals) {\n exported.locals = content.locals;\n }\n `:`content = content.__esModule ? content.default : content;\n\n exported.locals = content.locals || {};`}\n\nvar refs = 0;\nvar update;\nvar options = ${JSON.stringify(l)};\n\n${(0,r.getStyleTagTransformFn)(e,o)};\noptions.setAttributes = setAttributes;\n${(0,r.getInsertOptionCode)(a,e)}\noptions.domAPI = ${(0,r.getdomAPI)(i)};\noptions.insertStyleElement = insertStyleElement;\n\nexported.use = function(insertOptions) {\n options.options = insertOptions || {};\n\n if (!(refs++)) {\n update = API(content, options);\n }\n\n return exported;\n};\nexported.unuse = function() {\n if (refs > 0 && !--refs) {\n update();\n update = null;\n }\n};\n\n${d}\n\n${(0,r.getExportLazyStyleCode)(s,this,t)}\n`}case"styleTag":case"autoStyleTag":case"singletonStyleTag":default:{const o=n==="singletonStyleTag";const i=n==="autoStyleTag";const d=this.hot?(0,r.getStyleHmrCode)(s,this,t,false):"";return`\n ${(0,r.getImportStyleAPICode)(s,this)}\n ${(0,r.getImportStyleDomAPICode)(s,this,o,i)}\n ${(0,r.getImportInsertBySelectorCode)(s,this,a,e)}\n ${(0,r.getSetAttributesCode)(s,this,e)}\n ${(0,r.getImportInsertStyleElementCode)(s,this)}\n ${(0,r.getStyleTagTransformFnCode)(s,this,e,o,u)}\n ${(0,r.getImportStyleContentCode)(s,this,t)}\n ${i?(0,r.getImportIsOldIECode)(s,this):""}\n ${s?"":`content = content.__esModule ? content.default : content;`}\n\nvar options = ${JSON.stringify(l)};\n\n${(0,r.getStyleTagTransformFn)(e,o)};\noptions.setAttributes = setAttributes;\n${(0,r.getInsertOptionCode)(a,e)}\noptions.domAPI = ${(0,r.getdomAPI)(i)};\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n${d}\n\n${(0,r.getExportStyleCode)(s,this,t)}\n`}}};var l=s;e["default"]=l},163:t=>{function isEqualLocals(t,e,n){if(!t&&e||t&&!e){return false}var o;for(o in t){if(n&&o==="default"){continue}if(t[o]!==e[o]){return false}}for(o in e){if(n&&o==="default"){continue}if(!t[o]){return false}}return true}t.exports=isEqualLocals},931:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:true});e.getExportLazyStyleCode=getExportLazyStyleCode;e.getExportStyleCode=getExportStyleCode;e.getImportInsertBySelectorCode=getImportInsertBySelectorCode;e.getImportInsertStyleElementCode=getImportInsertStyleElementCode;e.getImportIsOldIECode=getImportIsOldIECode;e.getImportLinkAPICode=getImportLinkAPICode;e.getImportLinkContentCode=getImportLinkContentCode;e.getImportStyleAPICode=getImportStyleAPICode;e.getImportStyleContentCode=getImportStyleContentCode;e.getImportStyleDomAPICode=getImportStyleDomAPICode;e.getInsertOptionCode=getInsertOptionCode;e.getLinkHmrCode=getLinkHmrCode;e.getSetAttributesCode=getSetAttributesCode;e.getStyleHmrCode=getStyleHmrCode;e.getStyleTagTransformFn=getStyleTagTransformFn;e.getStyleTagTransformFnCode=getStyleTagTransformFnCode;e.getdomAPI=getdomAPI;e.stringifyRequest=stringifyRequest;var o=_interopRequireDefault(n(17));var r=_interopRequireDefault(n(163));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}const i=/^\.\.?[/\\]/;function isAbsolutePath(t){return o.default.posix.isAbsolute(t)||o.default.win32.isAbsolute(t)}function isRelativePath(t){return i.test(t)}function stringifyRequest(t,e){if(typeof t.utils!=="undefined"&&typeof t.utils.contextify==="function"){return JSON.stringify(t.utils.contextify(t.context,e))}const n=e.split("!");const{context:r}=t;return JSON.stringify(n.map((t=>{const e=t.match(/^(.*?)(\?.*)/);const n=e?e[2]:"";let i=e?e[1]:t;if(isAbsolutePath(i)&&r){i=o.default.relative(r,i);if(isAbsolutePath(i)){return i+n}if(isRelativePath(i)===false){i=`./${i}`}}return i.replace(/\\/g,"/")+n})).join("!"))}function getImportLinkAPICode(t,e){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/injectStylesIntoLinkTag.js")}`);return t?`import API from ${n};`:`var API = require(${n});`}function getImportLinkContentCode(t,e,n){const o=stringifyRequest(e,`!!${n}`);return t?`import content from ${o};`:`var content = require(${o});`}function getImportStyleAPICode(t,e){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/injectStylesIntoStyleTag.js")}`);return t?`import API from ${n};`:`var API = require(${n});`}function getImportStyleDomAPICode(t,e,n,r){const i=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/styleDomAPI.js")}`);const s=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/singletonStyleDomAPI.js")}`);if(r){return t?`import domAPI from ${i};\n import domAPISingleton from ${s};`:`var domAPI = require(${i});\n var domAPISingleton = require(${s});`}return t?`import domAPI from ${n?s:i};`:`var domAPI = require(${n?s:i});`}function getImportStyleContentCode(t,e,n){const o=stringifyRequest(e,`!!${n}`);return t?`import content, * as namedExport from ${o};`:`var content = require(${o});`}function getImportInsertBySelectorCode(t,e,n,r){if(n==="selector"){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/insertBySelector.js")}`);return t?`import insertFn from ${n};`:`var insertFn = require(${n});`}if(n==="module-path"){const n=stringifyRequest(e,`${r.insert}`);e.addBuildDependency(r.insert);return t?`import insertFn from ${n};`:`var insertFn = require(${n});`}return""}function getInsertOptionCode(t,e){if(t==="selector"){const t=e.insert?JSON.stringify(e.insert):'"head"';return`\n options.insert = insertFn.bind(null, ${t});\n `}if(t==="module-path"){return`options.insert = insertFn;`}return`options.insert = ${e.insert.toString()};`}function getImportInsertStyleElementCode(t,e){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/insertStyleElement.js")}`);return t?`import insertStyleElement from ${n};`:`var insertStyleElement = require(${n});`}function getStyleHmrCode(t,e,n,o){const i=stringifyRequest(e,`!!${n}`);return`\nif (module.hot) {\n if (!content.locals || module.hot.invalidate) {\n var isEqualLocals = ${r.default.toString()};\n var isNamedExport = ${t?"!content.locals":false};\n var oldLocals = isNamedExport ? namedExport : content.locals;\n\n module.hot.accept(\n ${i},\n function () {\n ${t?`if (!isEqualLocals(oldLocals, isNamedExport ? namedExport : content.locals, isNamedExport)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = isNamedExport ? namedExport : content.locals;\n\n ${o?`if (update && refs > 0) {\n update(content);\n }`:`update(content);`}`:`content = require(${i});\n\n content = content.__esModule ? content.default : content;\n\n ${o?"":`if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }`}\n\n if (!isEqualLocals(oldLocals, content.locals)) {\n module.hot.invalidate();\n\n return;\n }\n\n oldLocals = content.locals;\n\n ${o?`if (update && refs > 0) {\n update(content);\n }`:`update(content);`}`}\n }\n )\n }\n\n module.hot.dispose(function() {\n ${o?`if (update) {\n update();\n }`:`update();`}\n });\n}\n`}function getLinkHmrCode(t,e,n){const o=stringifyRequest(e,`!!${n}`);return`\nif (module.hot) {\n module.hot.accept(\n ${o},\n function() {\n ${t?"update(content);":`content = require(${o});\n\n content = content.__esModule ? content.default : content;\n\n update(content);`}\n }\n );\n\n module.hot.dispose(function() {\n update();\n });\n}`}function getdomAPI(t){return t?"isOldIE() ? domAPISingleton : domAPI":"domAPI"}function getImportIsOldIECode(t,e){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/isOldIE.js")}`);return t?`import isOldIE from ${n};`:`var isOldIE = require(${n});`}function getStyleTagTransformFnCode(t,e,n,r,i){if(r){return""}if(i==="default"){const n=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/styleTagTransform.js")}`);return t?`import styleTagTransformFn from ${n};`:`var styleTagTransformFn = require(${n});`}if(i==="module-path"){const o=stringifyRequest(e,`${n.styleTagTransform}`);e.addBuildDependency(n.styleTagTransform);return t?`import styleTagTransformFn from ${o};`:`var styleTagTransformFn = require(${o});`}return""}function getStyleTagTransformFn(t,e){return e?"":typeof t.styleTagTransform==="function"?`options.styleTagTransform = ${t.styleTagTransform.toString()}`:`options.styleTagTransform = styleTagTransformFn`}function getExportStyleCode(t,e,n){const o=stringifyRequest(e,`!!${n}`);return t?`export * from ${o};\n export default content && content.locals ? content.locals : undefined;`:"module.exports = content && content.locals || {};"}function getExportLazyStyleCode(t,e,n){const o=stringifyRequest(e,`!!${n}`);return t?`export * from ${o};\n export default exported;`:"module.exports = exported;"}function getSetAttributesCode(t,e,n){let r;if(typeof n.attributes!=="undefined"){r=n.attributes.nonce!=="undefined"?stringifyRequest(e,`!${o.default.join(__dirname,"runtime/setAttributesWithAttributesAndNonce.js")}`):stringifyRequest(e,`!${o.default.join(__dirname,"runtime/setAttributesWithAttributes.js")}`)}else{r=stringifyRequest(e,`!${o.default.join(__dirname,"runtime/setAttributesWithoutAttributes.js")}`)}return t?`import setAttributes from ${r};`:`var setAttributes = require(${r});`}},17:t=>{t.exports=require("path")},80:t=>{t.exports=JSON.parse('{"title":"Style Loader options","type":"object","properties":{"injectType":{"description":"Allows to setup how styles will be injected into DOM.","link":"https://github.com/webpack-contrib/style-loader#injecttype","enum":["styleTag","singletonStyleTag","autoStyleTag","lazyStyleTag","lazySingletonStyleTag","lazyAutoStyleTag","linkTag"]},"attributes":{"description":"Adds custom attributes to tag.","link":"https://github.com/webpack-contrib/style-loader#attributes","type":"object"},"insert":{"description":"Inserts `