This commit is contained in:
eric
2025-09-25 19:50:58 +08:00
parent afa521fae9
commit 2906d1d3fc
5 changed files with 309 additions and 70 deletions

View File

@@ -1,133 +1,111 @@
import path from "path";
// const { GenerateSW } = require("workbox-webpack-plugin");
const WebpackObfuscator = require("webpack-obfuscator");
const config = {
projectName: "cityh5",
date: "2023-12-2",
designWidth: 750,
deviceRatio: {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2,
},
deviceRatio: { 640: 2.34 / 2, 750: 1, 828: 1.81 / 2 },
sourceRoot: "src",
outputRoot: "dist",
plugins: [],
defineConstants: {},
copy: {
patterns: [],
options: {},
},
copy: { patterns: [], options: {} },
framework: "react",
compiler: "webpack5",
cache: {
enable: false, // Webpack 持久化缓存配置建议开启。默认配置请参考https://docs.taro.zone/docs/config-detail#cache
enable: true, // ✅ 开启缓存,加快构建
type: "filesystem",
},
h5: {
webpackChain(chain) {
// ✅ 避免 undefined.js统一使用标准占位符
chain.output.filename("static/js/[name].[contenthash:8].js");
chain.output.chunkFilename("static/js/[name].[contenthash:8].js");
chain
.plugin("MiniCssExtractPlugin")
.use(require("mini-css-extract-plugin"), [
{
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].css",
},
]);
chain.plugin("MiniCssExtractPlugin").use(require("mini-css-extract-plugin"), [
{
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].css",
},
]);
if (process.env.NODE_ENV === "production") {
// js代码混淆
// ✅ 保留原有混淆逻辑
chain.plugin("obfuscator").use(WebpackObfuscator, [
{
rotateStringArray: true,
stringArray: true,
stringArrayThreshold: 0.5, // 降低比例,提高速度
stringArrayThreshold: 0.5,
compact: true,
controlFlowFlattening: false, // 关闭,提高速度
deadCodeInjection: false, // 关闭,提高速度
controlFlowFlattening: false,
deadCodeInjection: false,
debugProtection: false,
disableConsoleOutput: true,
selfDefending: false, // 关闭,提高速度
simplify: true, // 开启简化,提高性能
// 禁用对 async/await 的转换
target: "browser", // 或设置为适合目标环境的 ECMAScript 版本
disableOptimizations: true, // 禁用某些优化来避免处理 async/await
selfDefending: false,
simplify: true,
target: "browser",
disableOptimizations: true,
},
["**/*.js", "!node_modules/**"], // 避免对 node_modules 进行混淆
["**/*.js", "!node_modules/**"],
]);
}
// ✅ markdown 支持
chain.module
.rule("markdown")
.test(/\.md$/)
.use("raw-loader")
.loader("raw-loader")
.end();
// ✅ ico 支持
chain.module
.rule("ico")
.test(/\.ico$/)
.use("file-loader")
.loader("file-loader")
.options({
name: "static/images/[name].[ext]",
});
.options({ name: "static/images/[name].[ext]" });
},
esnextModules: ["taro-ui"],
publicPath: "/",
// publicPath: `/v${new Date().getTime()}/`,
publicPath: "/", // ✅ 部署到根目录;如果是子路径,需要改成 /xxx/
staticDirectory: "static",
postcss: {
autoprefixer: {
enable: true,
config: {},
},
autoprefixer: { enable: true, config: {} },
cssModules: {
enable: false, // 默认为 false如需使用 css modules 功能,则设为 true
enable: false,
config: {
namingPattern: "module", // 转换模式,取值为 global/module
namingPattern: "module",
generateScopedName: "[name]__[local]___[hash:base64:5]",
},
},
},
router: {
// basename: '/myapp',
mode: "browser", // 或者是 'hash'
mode: "browser",
customRoutes: {
// "页面路径": "自定义路由"
"/pages/index/index": "/",
"/pages/book/index": "/book",
// '/pages/detail/index': ['/detail'], // 可以通过数组为页面配置多个自定义路由
// "pages/my/index": "/my",
// "pages/meetup/index": "/meetup",
// "pages/meetup/Detail/index": "/detail",
},
},
// defineConstants: {
// HOST: '"/api"'
// },
devServer: {
// host: 'nomad.hackrobot.cn', // 替换为您的域名
// port: 10087, // 选择一个适当的端口号
proxy: {
"/api/": {
target: JSON.parse('"http://localhost:8700"'), //本地调试端口
pathRewrite: {
"^/api/": "/",
},
target: "http://localhost:8700",
pathRewrite: { "^/api/": "/" },
changeOrigin: true,
},
},
// 允许特定域名访问
allowedHosts: ["nomadro.com", "localhost", ".nomadro.com","hackrobot.cn"], // 允许所有 *.nomadyt.com 子域访问
allowedHosts: ["nomadro.com", "localhost", ".nomadro.com", "hackrobot.cn"],
},
htmlPluginOption: {
favicon: path.resolve(__dirname, "..", "src", "images", "dgnomad.png"), // 同样处理 favicon 路径
favicon: path.resolve(__dirname, "..", "src", "images", "dgnomad.png"),
meta: {
"cache-control": "no-cache, no-store, must-revalidate",
pragma: "no-cache",

152
config/indexBack.js Normal file
View File

@@ -0,0 +1,152 @@
import path from "path";
// const { GenerateSW } = require("workbox-webpack-plugin");
const WebpackObfuscator = require("webpack-obfuscator");
const config = {
projectName: "cityh5",
date: "2023-12-2",
designWidth: 750,
deviceRatio: {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2,
},
sourceRoot: "src",
outputRoot: "dist",
plugins: [],
defineConstants: {},
copy: {
patterns: [],
options: {},
},
framework: "react",
compiler: "webpack5",
cache: {
enable: false, // Webpack 持久化缓存配置建议开启。默认配置请参考https://docs.taro.zone/docs/config-detail#cache
},
h5: {
webpackChain(chain) {
chain.output.filename("static/js/[name].[contenthash:8].js");
chain.output.chunkFilename("static/js/[name].[contenthash:8].js");
chain
.plugin("MiniCssExtractPlugin")
.use(require("mini-css-extract-plugin"), [
{
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].css",
},
]);
if (process.env.NODE_ENV === "production") {
// js代码混淆
chain.plugin("obfuscator").use(WebpackObfuscator, [
{
rotateStringArray: true,
stringArray: true,
stringArrayThreshold: 0.5, // 降低比例,提高速度
compact: true,
controlFlowFlattening: false, // 关闭,提高速度
deadCodeInjection: false, // 关闭,提高速度
debugProtection: false,
disableConsoleOutput: true,
selfDefending: false, // 关闭,提高速度
simplify: true, // 开启简化,提高性能
// 禁用对 async/await 的转换
target: "browser", // 或设置为适合目标环境的 ECMAScript 版本
disableOptimizations: true, // 禁用某些优化来避免处理 async/await
},
["**/*.js", "!node_modules/**"], // 避免对 node_modules 进行混淆
]);
}
chain.module
.rule("markdown")
.test(/\.md$/)
.use("raw-loader")
.loader("raw-loader")
.end();
chain.module
.rule("ico")
.test(/\.ico$/)
.use("file-loader")
.loader("file-loader")
.options({
name: "static/images/[name].[ext]",
});
},
esnextModules: ["taro-ui"],
publicPath: "/",
// publicPath: `/v${new Date().getTime()}/`,
staticDirectory: "static",
postcss: {
autoprefixer: {
enable: true,
config: {},
},
cssModules: {
enable: false, // 默认为 false如需使用 css modules 功能,则设为 true
config: {
namingPattern: "module", // 转换模式,取值为 global/module
generateScopedName: "[name]__[local]___[hash:base64:5]",
},
},
},
router: {
// basename: '/myapp',
mode: "browser", // 或者是 'hash'
customRoutes: {
// "页面路径": "自定义路由"
"/pages/index/index": "/",
"/pages/book/index": "/book",
// '/pages/detail/index': ['/detail'], // 可以通过数组为页面配置多个自定义路由
// "pages/my/index": "/my",
// "pages/meetup/index": "/meetup",
// "pages/meetup/Detail/index": "/detail",
},
},
// defineConstants: {
// HOST: '"/api"'
// },
devServer: {
// host: 'nomad.hackrobot.cn', // 替换为您的域名
// port: 10087, // 选择一个适当的端口号
proxy: {
"/api/": {
target: JSON.parse('"http://localhost:8700"'), //本地调试端口
pathRewrite: {
"^/api/": "/",
},
changeOrigin: true,
},
},
// 允许特定域名访问
allowedHosts: [
"nomadro.com",
"localhost",
".nomadro.com",
"hackrobot.cn",
], // 允许所有 *.nomadyt.com 子域访问
},
htmlPluginOption: {
favicon: path.resolve(__dirname, "..", "src", "images", "dgnomad.png"), // 同样处理 favicon 路径
meta: {
"cache-control": "no-cache, no-store, must-revalidate",
pragma: "no-cache",
expires: "0",
},
},
target: ["web", "browserslist:> 0.25%, not dead"],
},
};
module.exports = function (merge) {
if (process.env.NODE_ENV === "development") {
return merge({}, config, require("./dev"));
}
return merge({}, config, require("./prod"));
};