You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
5.7 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createCSSRule = createCSSRule;
exports.default = _default;
function _react() {
const data = _interopRequireDefault(require("react"));
_react = function _react() {
return data;
};
return data;
}
function _types() {
const data = require("@umijs/types");
_types = function _types() {
return data;
};
return data;
}
function _postcssSafeParser() {
const data = _interopRequireDefault(require("postcss-safe-parser"));
_postcssSafeParser = function _postcssSafeParser() {
return data;
};
return data;
}
function _utils() {
const data = require("@umijs/utils");
_utils = function _utils() {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function createCSSRule({
webpackConfig,
type,
config,
lang,
test,
isDev,
loader,
options,
browserslist,
miniCSSExtractPluginLoaderPath
}) {
const rule = webpackConfig.module.rule(lang).test(test);
applyLoaders(rule.oneOf('css-modules').resourceQuery(/modules/), true);
applyLoaders(rule.oneOf('css'), false);
function applyLoaders(rule, isCSSModules) {
if (config.styleLoader) {
rule.use('style-loader').loader(require.resolve('style-loader')).options((0, _utils().deepmerge)({
base: 0
}, config.styleLoader));
} else {
if (type === _types().BundlerConfigType.csr && !config.styleLoader) {
rule.use('extract-css-loader').loader(miniCSSExtractPluginLoaderPath || require.resolve('mini-css-extract-plugin/dist/loader')).options({
publicPath: './',
hmr: isDev
});
}
}
if (isDev && isCSSModules && config.cssModulesTypescriptLoader) {
rule.use('css-modules-typescript-loader').loader(require.resolve('css-modules-typescript-loader')).options(config.cssModulesTypescriptLoader);
}
rule.use('css-loader').loader(require.resolve('css-loader')).options((0, _utils().deepmerge)(_objectSpread({
importLoaders: 1
}, type === _types().BundlerConfigType.ssr ? {
onlyLocals: true
} : {}, {}, isCSSModules ? {
modules: {
localIdentName: '[local]___[hash:base64:5]'
}
} : {}), config.cssLoader || {}));
rule.use('postcss-loader').loader(require.resolve('postcss-loader')).options((0, _utils().deepmerge)({
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [// https://github.com/luisrudge/postcss-flexbugs-fixes
require('postcss-flexbugs-fixes'), // https://github.com/csstools/postcss-preset-env
require('postcss-preset-env')({
// TODO: set browsers
autoprefixer: _objectSpread({}, config.autoprefixer, {
overrideBrowserslist: browserslist
}),
// https://cssdb.org/
stage: 3
}), ...(config.extraPostCSSPlugins ? config.extraPostCSSPlugins : [])]
}, config.postcssLoader || {}));
if (loader) {
rule.use(loader).loader(require.resolve(loader)).options(options || {});
}
}
}
function _default({
type,
config,
webpackConfig,
isDev,
disableCompress,
browserslist,
miniCSSExtractPluginPath,
miniCSSExtractPluginLoaderPath
}) {
// css
createCSSRule({
type,
webpackConfig,
config,
isDev,
lang: 'css',
test: /\.(css)(\?.*)?$/,
browserslist,
miniCSSExtractPluginLoaderPath
}); // less
const theme = config.theme;
createCSSRule({
type,
webpackConfig,
config,
isDev,
lang: 'less',
test: /\.(less)(\?.*)?$/,
loader: 'less-loader',
options: (0, _utils().deepmerge)({
modifyVars: theme,
javascriptEnabled: true
}, config.lessLoader || {}),
browserslist,
miniCSSExtractPluginLoaderPath
}); // extract css
if (!config.styleLoader) {
const hash = !isDev && config.hash ? '.[contenthash:8]' : ''; // only csr generator css files
if (type === _types().BundlerConfigType.csr) {
webpackConfig.plugin('extract-css').use(miniCSSExtractPluginPath || require.resolve('mini-css-extract-plugin'), [{
filename: `[name]${hash}.css`,
chunkFilename: `[name]${hash}.chunk.css`,
ignoreOrder: true
}]);
}
}
if (!isDev && !disableCompress) {
webpackConfig.plugin('optimize-css').use(require.resolve('optimize-css-assets-webpack-plugin'), [{
cssProcessorOptions: {
// https://github.com/postcss/postcss-safe-parser
// TODO: 待验证功能
parser: _postcssSafeParser().default
},
cssProcessorPluginOptions: {
preset: ['default', config.cssnano]
}
}]);
}
}