148 lines
4.4 KiB
JavaScript
148 lines
4.4 KiB
JavaScript
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"], // 允许所有 *.nomadyt.com 子域访问
|
||
},
|
||
htmlPluginOption: {
|
||
favicon: path.resolve(__dirname, "..", "src", "images", "youtube.ico"), // 同样处理 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"));
|
||
};
|