配置发布时删除console.log,开发环境也没log了
配置发布时删除console.log,开发环境也没log了
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 11 专业版 | HBuilderX |
产品分类:uniapp/小程序/微信
PC开发环境操作系统:
Windows
HBuilderX类型:
正式
HBuilderX版本号:
4.57
第三方开发者工具版本号:
1.06.2503281win32-x64
基础库版本号:
3.8.2
示例代码:
```javascript
import { defineConfig } from 'vite';
import uni from '[@dcloudio](/user/dcloudio)/vite-plugin-uni';
export default defineConfig({
plugins: [uni()],
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
},
},
});
操作步骤: hbuildx创建初始项目,配置vite.config.js后,使用菜单运行到微信小程序(并非 发行)
预期结果: 只在发行时删除log
实际结果: 开发模式也没有log
bug描述:
根据官方文档 vite-config
配置了如下代码,发现点击 菜单-运行-运行到小程序模拟器-微信开发工具时,也没有log打印了。
import { defineConfig } from 'vite';
import uni from '[@dcloudio](/user/dcloudio)/vite-plugin-uni';
export default defineConfig({
plugins: [uni()],
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
},
},
});
尝试添加
serve:{
terserOptions: {
compress: {
drop_console: false,
},
},
}
和
dev:{
terserOptions: {
compress: {
drop_console: false,
},
},
}
发现也都无效
微信小程序开发环境也要打包,产物放到开发者工具里面运行。你想决定是否留日志打印可以通过 process.env.NODE_ENV 来判断,如果是 development 就是开发环境,发行就是 production
// vite.config.js
import {
defineConfig
} from “vite”
import uni from ‘@dcloudio/vite-plugin-uni’;
const config = process.env.NODE_ENV === ‘development’ ? {
plugins: [uni()]
} : {
plugins: [uni()],
build: {
minify: ‘terser’,
terserOptions: {
compress: {
drop_console: true,
},
},
},
}
export default defineConfig(config);
好的感谢
vite.config.ts
import type { Plugin } from ‘vite’;
import { defineConfig } from ‘vite’;
import uni from ‘@dcloudio/vite-plugin-uni’;
import path from ‘path’;
import fs from ‘fs’;
// https://vitejs.dev/config/
export default defineConfig({
server: {
fs: {
allow: [path.resolve(__dirname, ‘h5’)],
},
headers: {
‘Cross-Origin-Opener-Policy’: ‘same-origin’,
‘Cross-Origin-Embedder-Policy’: ‘require-corp’,
// ‘Content-Type’: ‘application/wasm’,
},
proxy: {
‘/h5/sqlite3.wasm’: {
bypass: (req, res, options) => {
const filePath = path.resolve(__dirname, ‘public/h5/sqlite3.wasm’);
if (fs.existsSync(filePath)) {
res.statusCode = 200;
res.setHeader(‘Content-Type’, ‘application/wasm’);
fs.createReadStream(filePath).pipe(res);
} else {
res.statusCode = 404;
res.end(‘File not found’);
}
},
},
},
},
build: {
minify: ‘terser’,
terserOptions: {
compress: {
drop_console: true,
},
},
},
plugins: [uni()],
});
package.json
{
“name”: “uni-preset-vue”,
“version”: “0.0.0”,
“scripts”: {
“dev:custom”: “uni -p”,
“dev”: “uni”,
“dev:h5:ssr”: “uni --ssr”,
“dev:mp-alipay”: “uni -p mp-alipay”,
“dev:mp-baidu”: “uni -p mp-baidu”,
“dev:mp-jd”: “uni -p mp-jd”,
“dev:mp-kuaishou”: “uni -p mp-kuaishou”,
“dev:mp-lark”: “uni -p mp-lark”,
“dev:mp-qq”: “uni -p mp-qq”,
“dev:mp-toutiao”: “uni -p mp-toutiao”,
“dev:mp-weixin”: “uni -p mp-weixin”,
“dev:mp-xhs”: “uni -p mp-xhs”,
“dev:quickapp-webview”: “uni -p quickapp-webview”,
“dev:quickapp-webview-huawei”: “uni -p quickapp-webview-huawei”,
“dev:quickapp-webview-union”: “uni -p quickapp-webview-union”,
“build:custom”: “uni build -p”,
“build:h5”: “uni build”,
“build:h5:ssr”: “uni build --ssr”,
“build:mp-alipay”: “uni build -p mp-alipay”,
“build:mp-baidu”: “uni build -p mp-baidu”,
“build:mp-jd”: “uni build -p mp-jd”,
“build:mp-kuaishou”: “uni build -p mp-kuaishou”,
“build:mp-lark”: “uni build -p mp-lark”,
“build:mp-qq”: “uni build -p mp-qq”,
“build:mp-toutiao”: “uni build -p mp-toutiao”,
“build:mp-weixin”: “uni build -p mp-weixin”,
“build:mp-xhs”: “uni build -p mp-xhs”,
“build:quickapp-webview”: “uni build -p quickapp-webview”,
“build:quickapp-webview-huawei”: “uni build -p quickapp-webview-huawei”,
“build:quickapp-webview-union”: “uni build -p quickapp-webview-union”,
“type-check”: “vue-tsc --noEmit”,
“build”: “uni build -p app”,
“format”: "prettier --write “.//.{ts,tsx,js,jsx,vue,css,scss,json,md}"",
“prepare”: “husky install”,
“format:fix”: “prettier --write . && tsc --noEmit || true”,
“lint”: “eslint”
},
“dependencies”: {
“@dcloudio/uni-app”: “3.0.0-4060420250429001”,
“@dcloudio/uni-app-harmony”: “3.0.0-4060420250429001”,
“@dcloudio/uni-app-plus”: “3.0.0-4060420250429001”,
“@dcloudio/uni-components”: “3.0.0-4060420250429001”,
“@dcloudio/uni-h5”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-alipay”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-baidu”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-harmony”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-jd”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-kuaishou”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-lark”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-qq”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-toutiao”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-weixin”: “3.0.0-4060420250429001”,
“@dcloudio/uni-mp-xhs”: “3.0.0-4060420250429001”,
“@dcloudio/uni-quickapp-webview”: “3.0.0-4060420250429001”,
“@sqlite.org/sqlite-wasm”: “3.49.1-build4”,
“kysely-wasm”: “^1.2.1”,
“vue”: “^3.5.13”,
“vue-i18n”: “^9.14.4”
},
“devDependencies”: {
“@dcloudio/types”: “^3.4.15”,
“@dcloudio/uni-automator”: “3.0.0-4060420250429001”,
“@dcloudio/uni-cli-shared”: “3.0.0-4060420250429001”,
“@dcloudio/uni-stacktracey”: “3.0.0-4060420250429001”,
“@dcloudio/vite-plugin-uni”: “3.0.0-4060420250429001”,
“@typescript-eslint/eslint-plugin”: “^8.31.1”,
“@typescript-eslint/parser”: “^8.31.1”,
“@vue/runtime-core”: “^3.5.13”,
“@vue/tsconfig”: “^0.1.3”,
“eslint”: “^9.25.1”,
“husky”: “^9.1.7”,
“kysely”: "workspace:",
“lint-staged”: “^15.5.1”,
“prettier”: “^3.5.3”,
“ts-prune”: “^0.10.3”,
“typescript”: “^4.9.5”,
“vite”: “5.2.8”,
“vue-tsc”: “^1.8.27”
},
“lint-staged”: {
"src//*.{ts,tsx,js,jsx,vue,css,scss,json,md}”: [
“prettier --write”
]
}
}
pnpm build 之后
Run method: open HBuilderX, import dist\build\app run.
日志没有删除
感谢反馈,你手动替换一下 packages/uni-cli-shared/dist/vite/plugins/console.js 为 附件中的文件
问题出在配置方式上。在Vite中,build
配置项只会在生产构建时生效,但你在开发模式下也看到console被移除,说明配置可能被错误应用了。
正确的做法是区分开发和生产环境:
import { defineConfig } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';
export default defineConfig(({ mode }) => ({
plugins: [uni()],
build: mode === 'production' ? {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true
}
}
} : {}
}));
或者使用环境变量判断:
export default defineConfig({
plugins: [uni()],
build: process.env.NODE_ENV === 'production' ? {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true
}
}
} : {}
});