From eb6e913bb68d786ebaa7725d861d51f20cf85d0b Mon Sep 17 00:00:00 2001 From: Wei Zhu Date: Fri, 13 Nov 2020 16:50:13 +0800 Subject: [PATCH] chore: onBuildStart --- packages/remax-cli/src/API.ts | 10 +++++++++- packages/remax-cli/src/build/index.ts | 2 ++ packages/remax-cli/src/build/webpack/config.mini.ts | 4 ++-- .../src/build/webpack/config.miniPlugin.ts | 2 +- packages/remax-cli/src/build/webpack/config/css.ts | 13 ++++++++----- .../remax-cli/src/build/webpack/webBaseConfig.ts | 2 +- packages/remax-types/src/index.ts | 2 ++ 7 files changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/remax-cli/src/API.ts b/packages/remax-cli/src/API.ts index c273eab1b5..49d9d3285b 100644 --- a/packages/remax-cli/src/API.ts +++ b/packages/remax-cli/src/API.ts @@ -1,5 +1,5 @@ import * as t from '@babel/types'; -import { Plugin, Meta, HostComponent, Platform } from '@remax/types'; +import { Plugin, Meta, HostComponent, Platform, Options } from '@remax/types'; import { slash } from '@remax/shared'; import { merge } from 'lodash'; import Config from 'webpack-chain'; @@ -90,6 +90,14 @@ export default class API { }, true); } + onBuildStart(config: Options) { + this.plugins.forEach(plugin => { + if (typeof plugin.onBuildStart === 'function') { + plugin.onBuildStart({ config }); + } + }); + } + onAppConfig(config: any) { return this.plugins.reduce((acc, plugin) => { if (typeof plugin.onAppConfig === 'function') { diff --git a/packages/remax-cli/src/build/index.ts b/packages/remax-cli/src/build/index.ts index a357d88abd..88174dc47a 100644 --- a/packages/remax-cli/src/build/index.ts +++ b/packages/remax-cli/src/build/index.ts @@ -7,6 +7,8 @@ import API from '../API'; const version = require('remax/package.json').version; export function run(options: Options, api: API): webpack.Compiler { + api.onBuildStart(options); + if (options.target === Platform.web) { // 兼容 herbox 所以用 require const WebBuilder = require('./WebBuilder').default; diff --git a/packages/remax-cli/src/build/webpack/config.mini.ts b/packages/remax-cli/src/build/webpack/config.mini.ts index dbe5651b45..74fe578763 100644 --- a/packages/remax-cli/src/build/webpack/config.mini.ts +++ b/packages/remax-cli/src/build/webpack/config.mini.ts @@ -162,7 +162,7 @@ export default function webpackConfig(builder: Builder): webpack.Configuration { builder, }); - cssConfig(config, builder.options, false); + cssConfig(config, builder, false); config.module .rule('image') @@ -221,7 +221,7 @@ export default function webpackConfig(builder: Builder): webpack.Configuration { config, webpack, addCSSRule: (ruleConfig: RuleConfig) => { - addCSSRule(config, builder.options, false, ruleConfig); + addCSSRule(config, builder, false, ruleConfig); }, }; diff --git a/packages/remax-cli/src/build/webpack/config.miniPlugin.ts b/packages/remax-cli/src/build/webpack/config.miniPlugin.ts index 04fbdf390b..10b9d13fd4 100644 --- a/packages/remax-cli/src/build/webpack/config.miniPlugin.ts +++ b/packages/remax-cli/src/build/webpack/config.miniPlugin.ts @@ -131,7 +131,7 @@ export default function webpackConfig(builder: Builder): webpack.Configuration { builder, }); - cssConfig(config, builder.options, false); + cssConfig(config, builder, false); config.module .rule('image') diff --git a/packages/remax-cli/src/build/webpack/config/css.ts b/packages/remax-cli/src/build/webpack/config/css.ts index 372fbe155e..56dfc8387a 100644 --- a/packages/remax-cli/src/build/webpack/config/css.ts +++ b/packages/remax-cli/src/build/webpack/config/css.ts @@ -4,6 +4,7 @@ import Config from 'webpack-chain'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; import { Options } from '@remax/types'; import { slash } from '@remax/shared'; +import Builder from '../../Builder'; export interface RuleConfig { name: string; @@ -20,7 +21,8 @@ function resolvePostcssConfig(options: Options) { return slash(path.resolve(__dirname, '../../../..')); } -export function addCSSRule(webpackConfig: Config, options: Options, web: boolean, ruleConfig: RuleConfig) { +export function addCSSRule(webpackConfig: Config, builder: Builder, web: boolean, ruleConfig: RuleConfig) { + const { options } = builder; const rule = webpackConfig.module.rule(ruleConfig.name).test(ruleConfig.test); function applyLoaders(rule: Config.Rule>, cssModules: boolean) { @@ -76,16 +78,17 @@ export function addCSSRule(webpackConfig: Config, options: Options, web: boolean applyLoaders(rule.oneOf('normal'), false); } -export function cssConfig(webpackConfig: Config, options: Options, web: boolean) { - addCSSRule(webpackConfig, options, web, { +export function cssConfig(webpackConfig: Config, builder: Builder, web: boolean) { + addCSSRule(webpackConfig, builder, web, { name: 'css', test: /\.css(\?.*)?$/, }); if (!web) { + const { style } = builder.api.getMeta(); webpackConfig.module - .rule('acss') - .test(/\.acss$/) + .rule(style) + .test(file => file.endsWith(style)) .use('mini-css-extract-loader') .loader(MiniCssExtractPlugin.loader) .end() diff --git a/packages/remax-cli/src/build/webpack/webBaseConfig.ts b/packages/remax-cli/src/build/webpack/webBaseConfig.ts index 97e9579648..eb115d0120 100644 --- a/packages/remax-cli/src/build/webpack/webBaseConfig.ts +++ b/packages/remax-cli/src/build/webpack/webBaseConfig.ts @@ -34,7 +34,7 @@ export default function webBaseConfig(config: Config, builder: Builder) { config.module.rule('js').exclude.add(/(node_modules)/); } - cssConfig(config, builder.options, true); + cssConfig(config, builder, true); config.module .rule('image') diff --git a/packages/remax-types/src/index.ts b/packages/remax-types/src/index.ts index a9b10357e9..77a2100606 100644 --- a/packages/remax-types/src/index.ts +++ b/packages/remax-types/src/index.ts @@ -173,6 +173,8 @@ export interface Plugin { */ shouldHostComponentRegister?: (options: ShouldHostComponentRegister) => boolean; + onBuildStart?: (params: { config: Options }) => void; + /** * 修改 webpack 配置 */