config文件夹内容修改
一、index.js修改
| 'use strict' |
| // Template version: 1.3.1 |
| // see http://vuejs-templates.github.io/webpack for documentation. |
| |
| const path = require('path') |
| |
| module.exports = { |
| dev: { |
| assetsSubDirectory: 'static', |
| assetsPublicPath: '/', |
| proxyTable: {}, |
| host: 'localhost', |
| port: 8080, |
| autoOpenBrowser: true, |
| errorOverlay: true, |
| notifyOnErrors: true, |
| poll: false, |
| devtool: 'cheap-module-eval-source-map', |
| cacheBusting: true, |
| cssSourceMap: true |
| }, |
| build: { |
| index: path.resolve(__dirname, '../dist/index.html'), |
| assetsRoot: path.resolve(__dirname, '../dist'), |
| assetsSubDirectory: 'static', |
| assetsPublicPath: '/', |
| productionSourceMap: false, |
| devtool: '#source-map', |
| productionGzip: false, |
| productionGzipExtensions: ['js', 'css'], |
| bundleAnalyzerReport: process.env.npm_config_report |
| }, |
| //<config:新添加的TEST环境配置> |
| test_build: { |
| index: path.resolve(__dirname, '../dist-test/index.html'), |
| assetsRoot: path.resolve(__dirname, '../dist-test'), |
| assetsSubDirectory: 'static', |
| assetsPublicPath: '/', |
| productionSourceMap: false, |
| devtool: '#source-map', |
| productionGzip: false, |
| productionGzipExtensions: ['js', 'css'], |
| bundleAnalyzerReport: process.env.npm_config_report |
| } |
| } |
二、test.env.js新增
| 'use strict' |
| const merge = require('webpack-merge') |
| const prodEnv = require('./prod.env') |
| |
| module.exports = merge(prodEnv, { |
| NODE_ENV: '"development"', |
| VUE_APP_ENV: '"test"', //<config:新添加的TEST环境配置> |
| VUE_APP_DEBUG: false //<config:新添加的TEST环境配置> |
| }) |
| |
build文件夹内容修改
一、webpack.test.conf.js新增
| 'use strict' |
| const path = require('path') |
| const utils = require('./utils') |
| const webpack = require('webpack') |
| const config = require('../config') |
| const merge = require('webpack-merge') |
| const baseWebpackConfig = require('./webpack.base.conf') |
| const CopyWebpackPlugin = require('copy-webpack-plugin') |
| const HtmlWebpackPlugin = require('html-webpack-plugin') |
| const ExtractTextPlugin = require('extract-text-webpack-plugin') |
| const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') |
| const UglifyJsPlugin = require('uglifyjs-webpack-plugin') |
| //<config:新添加的TEST环境配置> |
| const env = require('../config/test.env') |
| |
| const webpackConfig = merge(baseWebpackConfig, { |
| module: { |
| rules: utils.styleLoaders({ |
| //<config:新添加的TEST环境配置> |
| sourceMap: config.test_build.productionSourceMap, |
| extract: true, |
| usePostCSS: true |
| }) |
| }, |
| //<config:新添加的TEST环境配置> |
| devtool: config.test_build.productionSourceMap ? config.test_build.devtool : false, |
| output: { |
| //<config:新添加的TEST环境配置> |
| path: config.test_build.assetsRoot, |
| filename: utils.assetsPath('js/[name].[chunkhash].js'), |
| chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') |
| }, |
| plugins: [ |
| // http://vuejs.github.io/vue-loader/en/workflow/production.html |
| new webpack.DefinePlugin({ |
| 'process.env': env |
| }), |
| new UglifyJsPlugin({ |
| uglifyOptions: { |
| compress: { |
| warnings: false, |
| // drop_debugger: true, |
| // drop_console: true |
| } |
| }, |
| //<config:新添加的TEST环境配置> |
| sourceMap: config.test_build.productionSourceMap, |
| parallel: true |
| }), |
| // extract css into its own file |
| new ExtractTextPlugin({ |
| filename: utils.assetsPath('css/[name].[contenthash].css'), |
| // Setting the following option to `false` will not extract CSS from codesplit chunks. |
| // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. |
| // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, |
| // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 |
| allChunks: true, |
| }), |
| // Compress extracted CSS. We are using this plugin so that possible |
| // duplicated CSS from different components can be deduped. |
| new OptimizeCSSPlugin({ |
| //<config:新添加的TEST环境配置> |
| cssProcessorOptions: config.test_build.productionSourceMap |
| ? { safe: true, map: { inline: false } } |
| : { safe: true } |
| }), |
| // generate dist index.html with correct asset hash for caching. |
| // you can customize output by editing /index.html |
| // see https://github.com/ampedandwired/html-webpack-plugin |
| new HtmlWebpackPlugin({ |
| //<config:新添加的TEST环境配置> |
| filename: config.test_build.index, |
| template: 'index.html', |
| inject: true, |
| minify: { |
| removeComments: true, |
| collapseWhitespace: true, |
| removeAttributeQuotes: true |
| // more options: |
| // https://github.com/kangax/html-minifier |
| }, |
| // necessary to consistently work with multiple chunks via CommonsChunkPlugin |
| chunksSortMode: 'dependency' |
| }), |
| // keep module.id stable when vendor modules does not change |
| new webpack.HashedModuleIdsPlugin(), |
| // enable scope hoisting |
| new webpack.optimize.ModuleConcatenationPlugin(), |
| // split vendor js into its own file |
| new webpack.optimize.CommonsChunkPlugin({ |
| name: 'vendor', |
| minChunks(module) { |
| // any required modules inside node_modules are extracted to vendor |
| return ( |
| module.resource && |
| /\.js$/.test(module.resource) && |
| module.resource.indexOf( |
| path.join(__dirname, '../node_modules') |
| ) === 0 |
| ) |
| } |
| }), |
| // extract webpack runtime and module manifest to its own file in order to |
| // prevent vendor hash from being updated whenever app bundle is updated |
| new webpack.optimize.CommonsChunkPlugin({ |
| name: 'manifest', |
| minChunks: Infinity |
| }), |
| // This instance extracts shared chunks from code splitted chunks and bundles them |
| // in a separate chunk, similar to the vendor chunk |
| // see: https://webpack.js.org/plugins/commons-chunk-plugin/ |
| new webpack.optimize.CommonsChunkPlugin({ |
| name: 'app', |
| async: 'vendor-async', |
| children: true, |
| minChunks: 3 |
| }), |
| |
| // copy custom static assets |
| new CopyWebpackPlugin([ |
| { |
| from: path.resolve(__dirname, '../static'), |
| //<config:新添加的TEST环境配置> |
| to: config.test_build.assetsSubDirectory, |
| ignore: ['.*'] |
| } |
| ]) |
| ] |
| }) |
| //<config:新添加的TEST环境配置> |
| if (config.test_build.productionGzip) { |
| const CompressionWebpackPlugin = require('compression-webpack-plugin') |
| |
| webpackConfig.plugins.push( |
| new CompressionWebpackPlugin({ |
| asset: '[path].gz[query]', |
| algorithm: 'gzip', |
| //<config:新添加的TEST环境配置> |
| test: new RegExp( |
| '\\.(' + |
| config.test_build.productionGzipExtensions.join('|') + |
| ')$' |
| ), |
| threshold: 10240, |
| minRatio: 0.8 |
| }) |
| ) |
| } |
| //<config:新添加的TEST环境配置> |
| if (config.test_build.bundleAnalyzerReport) { |
| const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin |
| webpackConfig.plugins.push(new BundleAnalyzerPlugin()) |
| } |
| |
| module.exports = webpackConfig |
| |
二、build-test.js新增
| 'use strict' |
| require('./check-versions')() |
| //<config:新添加的TEST环境配置> |
| process.env.NODE_ENV = 'test' |
| |
| const ora = require('ora') |
| const rm = require('rimraf') |
| const path = require('path') |
| const chalk = require('chalk') |
| const webpack = require('webpack') |
| const config = require('../config') |
| //<config:新添加的TEST环境配置> |
| const webpackConfig = require('./webpack.test.conf') |
| //<config:新添加的TEST环境配置> |
| const spinner = ora('building for test...') |
| spinner.start() |
| |
| rm(path.join(config.test_build.assetsRoot, config.test_build.assetsSubDirectory), err => { |
| if (err) throw err |
| webpack(webpackConfig, (err, stats) => { |
| spinner.stop() |
| if (err) throw err |
| process.stdout.write(stats.toString({ |
| colors: true, |
| modules: false, |
| children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. |
| chunks: false, |
| chunkModules: false |
| }) + '\n\n') |
| |
| if (stats.hasErrors()) { |
| console.log(chalk.red(' Build failed with errors.\n')) |
| process.exit(1) |
| } |
| |
| console.log(chalk.cyan(' Build complete.\n')) |
| console.log(chalk.yellow( |
| ' Tip: built files are meant to be served over an HTTP server.\n' + |
| ' Opening index.html over file:// won\'t work.\n' |
| )) |
| }) |
| }) |
| |
| |
| |
package.json文件内容修改
| { |
| "scripts": { |
| "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", |
| "start": "npm run dev", |
| "test": "node build/build-test.js"//<config:新添加的TEST环境配置> |
| }, |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)