import path from "path"; // const { GenerateSW } = require("workbox-webpack-plugin"); import favicon from './images/planet.ico'; 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",".hackrobot.cn",".ngrok-free.app"], // 允许所有 *.nomadyt.com 子域访问 }, htmlPluginOption: { favicon: path.resolve(__dirname, "..", "src", "images", "avatar.jpg"), // 同样处理 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")); };