diff --git a/packages/fes-preset-built-in/package.json b/packages/fes-preset-built-in/package.json
index 977fe07a..550c539f 100644
--- a/packages/fes-preset-built-in/package.json
+++ b/packages/fes-preset-built-in/package.json
@@ -58,7 +58,7 @@
"html-webpack-tags-plugin": "^3.0.0",
"less": "3.9.0",
"less-loader": "^8.0.0",
- "mini-css-extract-plugin": "^1.3.5",
+ "mini-css-extract-plugin": "^2.7.5",
"mockjs": "^1.1.0",
"postcss": "8.3.0",
"postcss-flexbugs-fixes": "^5.0.2",
@@ -71,7 +71,7 @@
"vue-loader": "^16.1.2",
"webpack": "^5.76.2",
"webpack-bundle-analyzer": "^4.4.0",
- "webpack-chain": "^6.5.1",
+ "webpack-5-chain": "^8.0.1",
"webpack-dev-server": "^3.11.2",
"webpackbar": "^5.0.0-3"
},
diff --git a/packages/fes-preset-built-in/src/index.js b/packages/fes-preset-built-in/src/index.js
index 1f61b798..0280576b 100644
--- a/packages/fes-preset-built-in/src/index.js
+++ b/packages/fes-preset-built-in/src/index.js
@@ -44,6 +44,7 @@ export default function () {
require.resolve('./plugins/features/terserOptions'),
require.resolve('./plugins/features/nodeModulesTransform'),
require.resolve('./plugins/features/vueLoader'),
+ require.resolve('./plugins/features/useExtraCSS'),
// misc
require.resolve('./plugins/misc/route'),
diff --git a/packages/fes-preset-built-in/src/plugins/commands/webpack/index.js b/packages/fes-preset-built-in/src/plugins/commands/webpack/index.js
index 013f1e8f..203581f6 100644
--- a/packages/fes-preset-built-in/src/plugins/commands/webpack/index.js
+++ b/packages/fes-preset-built-in/src/plugins/commands/webpack/index.js
@@ -21,7 +21,7 @@ export default function (api) {
async fn({ options }) {
const assert = require('assert');
const { getBundleAndConfigs } = require('../buildDevUtils');
- const { toString } = require('webpack-chain');
+ const { toString } = require('webpack-5-chain');
const { highlight } = require('cli-highlight');
const { bundleConfig } = await getBundleAndConfigs({ api });
diff --git a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/css.js b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/css.js
index 24fd6f67..6d494ad2 100644
--- a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/css.js
+++ b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/css.js
@@ -23,15 +23,14 @@ function createRules({
styleLoaderOption
}) {
function applyLoaders(rule, isCSSModules) {
- if (isDev) {
+ if (isDev || !config.useExtraCSS) {
rule.use('extra-css-loader')
.loader(require.resolve('style-loader'))
.options(Object.assign({}, styleLoaderOption));
} else {
rule.use('extra-css-loader')
.loader(require('mini-css-extract-plugin').loader)
- .options({
- });
+ .options({});
}
rule.use('css-loader')
@@ -110,7 +109,7 @@ export default function createCssWebpackConfig({
browserslist
});
- if (!isDev) {
+ if (!isDev && config.useExtraCSS) {
webpackConfig.plugin('extra-css')
.use(require.resolve('mini-css-extract-plugin'), [{
filename: '[name].[contenthash:8].css',
diff --git a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/index.js b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/index.js
index c837c2cc..3f36cf8b 100644
--- a/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/index.js
+++ b/packages/fes-preset-built-in/src/plugins/commands/webpackConfig/index.js
@@ -1,6 +1,6 @@
import { join } from 'path';
import { existsSync } from 'fs';
-import Config from 'webpack-chain';
+import Config from 'webpack-5-chain';
import webpack from 'webpack';
import createCssWebpackConfig from './css';
import getBabelOpts from './getBabelOpts';
@@ -97,7 +97,8 @@ export default async function getConfig({
.path(absoluteOutput)
.publicPath(publicPath)
.filename('[name].[contenthash:8].js')
- .chunkFilename('[name].[contenthash:8].chunk.js');
+ .chunkFilename('[name].[contenthash:8].chunk.js')
+ .assetModuleFilename('[hash][ext][query]');
// --------------- resolve -----------
webpackConfig.resolve.extensions.merge(['.mjs', '.js', '.jsx', '.vue', '.ts', '.tsx', '.json', '.wasm']);
@@ -113,48 +114,27 @@ export default async function getConfig({
webpackConfig.module
.rule('image')
.test(/\.(png|jpe?g|gif|webp|ico)(\?.*)?$/)
- .use('url-loader')
- .loader(require.resolve('url-loader'))
- .options({
- limit: config.inlineLimit || 8192,
- esModule: false,
- fallback: {
- loader: require.resolve('file-loader'),
- options: {
- name: 'static/[name].[hash:8].[ext]',
- esModule: false
- }
+ .type('asset')
+ .parser({
+ dataUrlCondition: {
+ maxSize: config.inlineLimit || 8 * 1024
}
});
webpackConfig.module
.rule('svg')
.test(/\.(svg)(\?.*)?$/)
- .use('file-loader')
- .loader(require.resolve('file-loader'))
- .options({
- name: 'static/[name].[hash:8].[ext]',
- esModule: false
- });
+ .type('asset/resource');
webpackConfig.module
.rule('fonts')
.test(/\.(eot|woff|woff2|ttf)(\?.*)?$/)
- .use('file-loader')
- .loader(require.resolve('file-loader'))
- .options({
- name: 'static/[name].[hash:8].[ext]',
- esModule: false
- });
+ .type('asset/resource');
webpackConfig.module
.rule('raw')
.test(/\.(txt|text|md)$/)
- .use('raw-loader')
- .loader(require.resolve('raw-loader'))
- .options({
- esModule: false
- });
+ .type('asset/resource');
const { targets, browserslist } = getTargetsAndBrowsersList({ config });
const babelOpts = await getBabelOpts({
diff --git a/packages/fes-preset-built-in/src/plugins/features/useExtraCSS.js b/packages/fes-preset-built-in/src/plugins/features/useExtraCSS.js
new file mode 100644
index 00000000..174c2a7c
--- /dev/null
+++ b/packages/fes-preset-built-in/src/plugins/features/useExtraCSS.js
@@ -0,0 +1,12 @@
+
+export default (api) => {
+ api.describe({
+ key: 'useExtraCSS',
+ config: {
+ schema(joi) {
+ return joi.boolean();
+ },
+ default: true
+ }
+ });
+};
diff --git a/packages/fes-template-h5/.fes.js b/packages/fes-template-h5/.fes.js
index 75345982..9c18fdda 100644
--- a/packages/fes-template-h5/.fes.js
+++ b/packages/fes-template-h5/.fes.js
@@ -7,7 +7,7 @@ export default {
// __VUE_OPTIONS_API__: true,
// __VUE_PROD_DEVTOOLS__: false
},
- publicPath: '/',
+ publicPath: './',
request: {
base: '/ras-mas',
dataField: 'result'
diff --git a/packages/fes-template-h5/.fes.prod.js b/packages/fes-template-h5/.fes.prod.js
index 0f64aa6a..6377fd5b 100644
--- a/packages/fes-template-h5/.fes.prod.js
+++ b/packages/fes-template-h5/.fes.prod.js
@@ -4,5 +4,11 @@
export default {
request: {
base: '/api'
- }
+ },
+ chainWebpack(memo) {
+ memo.output.filename('./static/[name].[contenthash:8].js')
+ .chunkFilename('./static/[name].[contenthash:8].chunk.js')
+ .assetModuleFilename('./static/[hash][ext][query]');
+ },
+ useExtraCSS: false
};
diff --git a/packages/fes-template-h5/src/pages/index.vue b/packages/fes-template-h5/src/pages/index.vue
index 5fe4b9ca..08d873fa 100644
--- a/packages/fes-template-h5/src/pages/index.vue
+++ b/packages/fes-template-h5/src/pages/index.vue
@@ -7,6 +7,7 @@
type="smile"
@click="clickIcon"
/>
+
@@ -67,6 +68,7 @@ div {
p {
margin: 20px;
}
+ background: url('@/images/male.png');
}
.one-icon {
color: yellow;
diff --git a/yarn.lock b/yarn.lock
index 8810a052..4f36b007 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9705,15 +9705,6 @@ min-indent@^1.0.0:
resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-mini-css-extract-plugin@^1.3.5:
- version "1.6.2"
- resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8"
- integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==
- dependencies:
- loader-utils "^2.0.0"
- schema-utils "^3.0.0"
- webpack-sources "^1.1.0"
-
mini-css-extract-plugin@^2.4.5:
version "2.6.1"
resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e"
@@ -9721,6 +9712,13 @@ mini-css-extract-plugin@^2.4.5:
dependencies:
schema-utils "^4.0.0"
+mini-css-extract-plugin@^2.7.5:
+ version "2.7.5"
+ resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5"
+ integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==
+ dependencies:
+ schema-utils "^4.0.0"
+
minimalistic-assert@^1.0.0:
version "1.0.1"
resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -12371,7 +12369,7 @@ sort-keys@^4.0.0:
dependencies:
is-plain-obj "^2.0.0"
-source-list-map@^2.0.0, source-list-map@^2.0.1:
+source-list-map@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
@@ -13724,6 +13722,14 @@ webidl-conversions@^6.1.0:
resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+webpack-5-chain@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmmirror.com/webpack-5-chain/-/webpack-5-chain-8.0.1.tgz#dda9db48c19e4e01e535e84241131bcc777243d8"
+ integrity sha512-Tu1w80WA2Z+X6e7KzGy+cc0A0z+npVJA/fh55q2azMJ030gqz343Kx+yNAstDCeugsepmtDWY2J2IBRW/O+DEA==
+ dependencies:
+ deepmerge "^1.5.2"
+ javascript-stringify "^2.0.1"
+
webpack-bundle-analyzer@^4.4.0:
version "4.6.1"
resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6"
@@ -13855,14 +13861,6 @@ webpack-merge@^5.8.0:
clone-deep "^4.0.1"
wildcard "^2.0.0"
-webpack-sources@^1.1.0:
- version "1.4.3"
- resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
- integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
- dependencies:
- source-list-map "^2.0.0"
- source-map "~0.6.1"
-
webpack-sources@^2.2.0:
version "2.3.1"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"