const path = require('path') const webpack = require('webpack') const WebpackOptimizePlugin = require('./packages/webpack-optimize-plugin') const { src, lib } = require('@dcloudio/uni-h5/path') const resolve = dir => path.resolve(__dirname, './', dir) module.exports = (api, options) => { if (!process.env.UNI_OPT_TREESHAKINGNG) { return } if (process.env.NODE_ENV !== 'production' || process.env.UNI_PLATFORM !== 'h5') { return } // 组件 const uniComponentsPath = resolve('.tmp/components.js') const uniInvokeApiPath = resolve('.tmp/invoke-api.js') const uniServiceApiPath = resolve('.tmp/api.js') const uniApiProtocolPath = resolve('.tmp/protocol.js') const uniApiSubscribePath = resolve('.tmp/subscribe.js') const uniH5AppComponentsPath = resolve('.tmp/app-components.js') const uniH5AppMixinsPath = resolve('.tmp/app-mixins.js') const uniH5SystemRoutes = resolve('.tmp/system-routes.js') options.transpileDependencies.push(/vue-cli-plugin-uni-optimize/) options.transpileDependencies.push(/uni-h5/) api.configureWebpack(webpackConfig => { return { watch: true, resolve: { alias: { ['uni-' + process.env.UNI_PLATFORM]: path.join(lib, `${process.env.UNI_PLATFORM}/main.js`), 'uni-core': path.join(src, 'core'), 'uni-view': path.join(src, 'core/view'), 'uni-service': path.join(src, 'core/service'), 'uni-shared': path.join(src, 'shared'), 'uni-mixins': path.join(src, 'core/view/mixins'), 'uni-helpers': path.join(src, 'core/helpers'), 'uni-platform': path.join(src, 'platforms/' + process.env.UNI_PLATFORM), // tree shaking 'uni-components': uniComponentsPath, 'uni-invoke-api': uniInvokeApiPath, 'uni-service-api': uniServiceApiPath, 'uni-api-protocol': uniApiProtocolPath, 'uni-api-subscribe': uniApiSubscribePath, // h5 components 'uni-h5-app-components': uniH5AppComponentsPath, 'uni-h5-app-mixins': uniH5AppMixinsPath, 'uni-h5-system-routes': uniH5SystemRoutes } }, plugins: [ new WebpackOptimizePlugin(), new webpack.DefinePlugin({ __VERSION__: JSON.stringify(require('@dcloudio/uni-' + process.env.UNI_PLATFORM + '/package.json').version), __PLATFORM__: JSON.stringify(process.env.UNI_PLATFORM) }), new webpack.ProvidePlugin({ 'console': [path.join(src, 'core/helpers/console'), 'default'], 'UniViewJSBridge': [path.join(src, 'core/view/bridge/index')], 'UniServiceJSBridge': [path.join(src, 'core/service/bridge/index')] }) ] } }) api.chainWebpack(webpackConfig => { // Vue webpackConfig.module .rule('vue') .use('vue-loader') .tap(options => Object.assign(options, { isH5TreeShaking: true, cacheDirectory: false, cacheIdentifier: false })) .end() .uses .delete('cache-loader') }) }