webpack加入版本号打包

本文探讨了在前端项目重构过程中遇到的问题及解决方案,重点介绍了如何通过安装特定插件实现版本记录,确保每次发布都能准确追踪到正确版本,避免因版本冲突导致的问题,并详细解释了相关插件的使用方法。

还是回到那个老项目重构的问题。

更新了脚本以后,偶尔其他团队成员说,哦,某某js无效了。

调试了一圈,发现原来少写了判断,build,原来的合并的js文件就更新,虽说这样一直发布也没什么问题,但是还是希望每个版本,能有一个记录。

不为别的,这次是版本x的出错了,也许下一次是版本x是正确的,但是更新x+1的时候,就发现出错了。在进行错误处理的时候,起码你能够让网站先使用之前正确的版本,再给你自己足够的时间去调整。

除此之外,github、git@osc,都有一个release的功能,就是当你自己写的npm或者bower发布以后,有一个所谓的release版本号,之前一直都是用gulp在弄这个东西,现在换了webpack,如何release,就是个问题。

解决这些问题,也很简单,额外装个插件就可以解决了,为了便于调试release版本,我们还额外加了一个插件:

npm install copy-webpack-plugin html-webpack-plugin --save-dev

改一改build的配置文件:

const ExtractTextPlugin = require('extract-text-webpack-plugin');
// 要加两个插件
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

const packageInfo = require('./package.json');

const outputPath = __dirname + '/output/' + packageInfo.version;
const releasePath = __dirname + '/output/release/';

module.exports = {
	entry: [
		"./main.js"
	],
	output: {
		path: outputPath, // 输出到版本号目录
		filename: 'app.js'
	},
	module: {
		loaders: [
			{
				test: /\.(es6|jsx)?$/,
				exclude: /(node_modules|bower_components)/,
				loader: 'babel',
				query: {
					presets: ['es2015', 'react'],
					plugins: [
						"transform-es2015-block-scoping",
						"transform-class-properties",
						"transform-es2015-computed-properties"
					]
				}
			},
			{
				test: /\.(png|jpg|jpeg|gif|woff|woff2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
				loader: 'url-loader?limit=1000'
			},
			{
				test: /\.(ttf|eot|svg)(\?[\s\S]+)?$/,
				loader: 'file'
			},
			{
				test: /\.styl$/,
				// loader: "style!css!stylus"
				loader: ExtractTextPlugin.extract('style', 'css!stylus')
			},
			{
				test: /\.css$/,
				// loader: "style!css"
				loader: ExtractTextPlugin.extract('style', 'css')
			}
		]
	},
	plugins: [
		new ExtractTextPlugin('app.css'),
		new HtmlWebpackPlugin({
			title: 'Webpack Tutorial - ver ' + packageInfo.version
		}),
		new CopyWebpackPlugin([
			// 打包出release
			{
				from: outputPath,
				to: releasePath,
				toType: 'dir'
			}
		])
	]
};

首先我假定版本号是从package.json文件获取,得到版本号以后,输出的目录就以output/version输出,最终输出完以后,将output/version复制到output/release的目录下。

并且我们还加入了HtmlWebpackPlugin的插件,他会自动根据你配置的config,获取到相关的输出点,并根据这个输出点,生成一个html文件。

这样打包完毕,我们直接访问output/version,就能看到加载测试结果了。

实际上这个问题我是要解决前端任意版本完整的单元测试状态,output不一定需要push上版本仓库,我只要通过拿到git的版本tag,然后build就可以跑任意版本的测试了,而且也不会覆盖掉现有的release。

copy-webpack-plugin说明

html-webpack-plugin说明

相关的代码已经提交到webpack-tutorial上了。

补充:发现一个bug,就是copy-webpack-plugin一定要手动创建了目录才行,不然第一次没法拷贝文件。

转载于:https://my.oschina.net/janpoem/blog/678021

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值