From 43399b72fd515345140b8e7f179907191beb9f5a Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Tue, 26 Jul 2022 17:39:15 +0800 Subject: [PATCH] feat: generate sourcemap --- packages/uni-cli-shared/lib/source-map.js | 13 ++++---- packages/vue-cli-plugin-uni/commands/build.js | 5 ++- .../vue-cli-plugin-uni/lib/commands/custom.js | 3 +- .../lib/configure-webpack.js | 32 +++++++++++++------ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/packages/uni-cli-shared/lib/source-map.js b/packages/uni-cli-shared/lib/source-map.js index 939c8062e..20cc191e5 100644 --- a/packages/uni-cli-shared/lib/source-map.js +++ b/packages/uni-cli-shared/lib/source-map.js @@ -28,11 +28,11 @@ function getSourceRoot () { } function moduleFilenameTemplate (info) { - if ( + if ( info.resourcePath && ( !info.allLoaders || - info.query.includes('type=script&lang=ts') || + info.query.includes('type=script&lang=ts') || info.resourcePath.endsWith('.ts') ) ) { @@ -46,14 +46,15 @@ function moduleFilenameTemplate (info) { const exclude = [/pages\.json/, /node_modules/, /vue&type=template/, /vue&type=style/] module.exports = { - createSourceMapDevToolPlugin (filename = false) { + createSourceMapDevToolPlugin (filename = false, args) { const options = { test: [/\.js$/], exclude, - moduleFilenameTemplate + moduleFilenameTemplate, + ...args } if (filename) { - options.filename = '../.sourcemap/' + process.env.UNI_PLATFORM + '/[name].js.map' + options.filename = '../.sourcemap/' + process.env.UNI_PLATFORM + '/[file].map' } return new webpack.SourceMapDevToolPlugin(options) }, @@ -64,4 +65,4 @@ module.exports = { moduleFilenameTemplate }) } -} +} diff --git a/packages/vue-cli-plugin-uni/commands/build.js b/packages/vue-cli-plugin-uni/commands/build.js index 1dd768586..9fc3f402e 100644 --- a/packages/vue-cli-plugin-uni/commands/build.js +++ b/packages/vue-cli-plugin-uni/commands/build.js @@ -35,7 +35,8 @@ module.exports = (api, options) => { '--auto-port': 'specify automator port', '--subpackage': 'specify subpackage', '--plugin': 'specify mp plugin', - '--manifest': 'build manifest.json' + '--manifest': 'build manifest.json', + '--sourcemap': 'generate sourcemap' } }, async (args) => { for (const key in defaults) { @@ -72,6 +73,8 @@ module.exports = (api, options) => { process.env.VUE_CLI_BUILD_TARGET = args.target + if (args['sourcemap']) process.env.SOURCEMAP = args['sourcemap'] + await build(args, api, options) delete process.env.VUE_CLI_BUILD_TARGET diff --git a/packages/vue-cli-plugin-uni/lib/commands/custom.js b/packages/vue-cli-plugin-uni/lib/commands/custom.js index f028c59ea..1718edb17 100644 --- a/packages/vue-cli-plugin-uni/lib/commands/custom.js +++ b/packages/vue-cli-plugin-uni/lib/commands/custom.js @@ -33,7 +33,8 @@ module.exports = function custom (argv) { minimize: process.env.UNI_MINIMIZE === 'true', clean: false, subpackage: argv.subpackage, - plugin: argv.plugin + plugin: argv.plugin, + sourcemap: argv['sourcemap'], }).catch(err => { console.error(err) process.exit(1) diff --git a/packages/vue-cli-plugin-uni/lib/configure-webpack.js b/packages/vue-cli-plugin-uni/lib/configure-webpack.js index 7cc5e52ad..e49b473a4 100644 --- a/packages/vue-cli-plugin-uni/lib/configure-webpack.js +++ b/packages/vue-cli-plugin-uni/lib/configure-webpack.js @@ -267,7 +267,7 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt }) } - if (process.env.NODE_ENV === 'development') { + if (process.env.NODE_ENV === 'development' || (process.env.NODE_ENV === 'production' && process.env.SOURCEMAP === 'true')) { const sourceMap = require('@dcloudio/uni-cli-shared/lib/source-map') let isAppService = false if ( @@ -277,18 +277,32 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt ) { isAppService = !!vueOptions.pluginOptions['uni-app-plus'].service } - if (process.env.UNI_PLATFORM === 'h5' || isAppService) { - plugins.push(sourceMap.createEvalSourceMapDevToolPlugin()) - } else if ( - process.env.UNI_PLATFORM.indexOf('mp-') === 0 && + + const useEvalSourceMap = process.env.UNI_PLATFORM === 'h5' || isAppService + const useSourceMap = process.env.UNI_PLATFORM.indexOf('mp-') === 0 && process.env.UNI_PLATFORM !== 'mp-baidu' && process.env.UNI_PLATFORM !== 'mp-alipay' && process.env.UNI_PLATFORM !== 'quickapp-webview' // 目前 ov 的开发工具支持 eval 模式 - ) { - plugins.push(sourceMap.createSourceMapDevToolPlugin(process.env.UNI_PLATFORM === 'mp-weixin' || process.env.UNI_PLATFORM === 'mp-toutiao')) + + if (process.env.NODE_ENV === 'production') { + const sourceMapOptions = { + noSources: true, + append: false + } + if (isInHBuilderX && process.env.SOURCEMAP_PATH) + sourceMapOptions.filename = process.env.SOURCEMAP_PATH + if (useEvalSourceMap || useSourceMap) { + plugins.push(sourceMap.createSourceMapDevToolPlugin(!sourceMapOptions.filename, sourceMapOptions)) + } + } else { + if (useEvalSourceMap) { + plugins.push(sourceMap.createEvalSourceMapDevToolPlugin()) + } else if (useSourceMap) { + plugins.push(sourceMap.createSourceMapDevToolPlugin(process.env.UNI_PLATFORM === 'mp-weixin' || process.env.UNI_PLATFORM === 'mp-toutiao')) + } } } - + try { if (process.env.UNI_HBUILDERX_PLUGINS) { require(path.resolve(process.env.UNI_HBUILDERX_PLUGINS, 'uni_helpers/lib/bytenode')) @@ -351,4 +365,4 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt watchOptions: require('./util').getWatchOptions() }, platformWebpackConfig) } -} +} -- GitLab