UNPKG

@alicloud/console-toolkit-plugin-react

Version:

console toolkit plugin for base react app

169 lines (168 loc) 7.44 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.style = void 0; var autoprefixer = require("autoprefixer"); var tailwindcss = require("tailwindcss"); var utils_1 = require("../../../utils"); var conditions_1 = require("./conditions"); var normalizeTheme_1 = require("./normalizeTheme"); function applyCssLoaders(rule, options) { var shouldExtract = options.shouldExtract, loader = options.loader, loaderOptions = options.loaderOptions, _a = options.modules, modules = _a === void 0 ? false : _a, _b = options.sourceMap, sourceMap = _b === void 0 ? false : _b, classNamePrefix = options.classNamePrefix, _c = options.hashPrefix, hashPrefix = _c === void 0 ? '' : _c, _d = options.postCssPlugins, postCssPlugins = _d === void 0 ? [] : _d, _e = options.tailwindcss, tailwindcssConfig = _e === void 0 ? {} : _e; // extract-text-webpack-plugin 在 webpack 4 中用作提取 css 的时候存在问题 // 使用 mini-css-extract-plugin 作为更好的代替方案进行 css 的抽取 var styleLoaderOptions = classNamePrefix ? { singleton: true, attrs: { // Add a custom attr to the generated style tag to easily // identify which widget the style tag belonging to. from: classNamePrefix } } : {}; if (shouldExtract) { rule .use('extract-css-loader') .loader(require('mini-css-extract-plugin').loader) .options(__assign(__assign({}, styleLoaderOptions), { publicPath: './' })); } else { rule .use('style-loader') .loader(require.resolve('style-loader')) .options(styleLoaderOptions); } var cssOptions = { sourceMap: sourceMap, importLoaders: 2, modules: modules, }; if (modules === true || modules === 'local') { cssOptions = __assign(__assign({}, cssOptions), { localIdentName: "".concat(classNamePrefix ? classNamePrefix : "[path]", "___[name]__[local]___[hash:base64:5]"), hashPrefix: hashPrefix }); } postCssPlugins.unshift(autoprefixer({ // @ts-ignore overrideBrowserslist: [ '> 0%', 'not ie <= 9', ], })); // add tailwindcss plugin if (tailwindcssConfig.config) { postCssPlugins.unshift(tailwindcss({ config: tailwindcssConfig.config, })); } // css loader rule .use('css-loader') .loader(require.resolve('css-loader')) .options(cssOptions); // postcss loader rule .use('postcss-loader') .loader(require.resolve('postcss-loader')) .options({ postcssOptions: { plugins: postCssPlugins, } }); // style loader, eg: less, scss if (loader) { rule .use(loader) .loader(require.resolve(loader)) .options(loaderOptions); } } /** * * @param config * @param options */ var style = function (config, options) { var cwd = options.cwd, shouldExtract = options.shouldExtract, _a = options.condition, condition = _a === void 0 ? 'stable' : _a, consoleOS = options.consoleOS, disableConsoleOS = options.disableConsoleOS; var _b = consoleOS || {}, disableOsCssExtends = _b.disableOsCssExtends, disableCssPrefix = _b.disableCssPrefix; function createCssRules(lang, test, styleOptions) { var baseRule = (0, utils_1.createRules)(config, { lang: lang, test: test }); applyCssLoaders(baseRule, __assign(__assign({}, options), styleOptions)); } // 兼容 less-loader v5 配置 var _c = options.lessLoaderOptions || {}, lessOptions = _c.lessOptions, prependData = _c.prependData, appendData = _c.appendData, sourceMap = _c.sourceMap, implementation = _c.implementation, restLessLoaderOptions = __rest(_c, ["lessOptions", "prependData", "appendData", "sourceMap", "implementation"]); var lessLoaderOptions = { lessOptions: typeof lessOptions === 'function' ? lessOptions : __assign(__assign({ javascriptEnabled: true, modifyVars: (options.theme ? (0, normalizeTheme_1.default)(options.theme, { cwd: cwd }) : {}) }, lessOptions), restLessLoaderOptions), prependData: prependData, appendData: appendData, sourceMap: sourceMap, implementation: implementation }; createCssRules('css', /\.css$/); /* * 排除掉 scope.less 的 的文件, 以防 less-loader 被加载两次 */ var _d = (0, conditions_1.getCondtions)(cwd), LessConditionsPreset = _d.LessConditionsPreset, ScopedLessConditionsPreset = _d.ScopedLessConditionsPreset; var lessCondition = LessConditionsPreset[condition]; /** * 这个地方 由于以前默认的时候 css-loader 0.x 和 1.x 会对 :global 默认转义, * 但是在 2.x 之后 需要配置 modules = 'global' 字段. 为了兼容以前的版本 默认开启 * 对 :global 的处理. * @see https://github.com/webpack-contrib/css-loader#modules */ createCssRules('less', lessCondition, { loader: 'less-loader', loaderOptions: lessLoaderOptions, modules: false, }); // scoped.less var scopeCondition = ScopedLessConditionsPreset[condition]; createCssRules('less-scoped', scopeCondition, { loader: 'less-loader', loaderOptions: lessLoaderOptions, modules: true, }); if (shouldExtract) { // NOTE there 'extract-css' used by breezr-plugin-long-term-caching config.plugin('extract-css') .use(require('mini-css-extract-plugin'), [{ filename: '[name].css', chunkFilename: '[id].css', // 针对沙箱场景替换 async chunk 的文件名 // 必须是没有关闭微应用构建且没关闭构建 .os.css 文件 insert: (!disableConsoleOS && !disableOsCssExtends && !disableCssPrefix) ? function (linkTag) { var isConsoleOS = false; try { // context maybe not defined // @ts-ignore isConsoleOS = !!context.__IS_CONSOLE_OS_CONTEXT__ && window !== window.parent; } catch (e) { // ... } if (isConsoleOS) linkTag.href = linkTag.href.replace('.css', '.os.css'); document.head.appendChild(linkTag); } : undefined, }]); } }; exports.style = style;