打包文件
vue 结合webpack
Webpack
In your entry file:
这里是webpack.base.conf.js webpack的设置
const createLintingRule = () => ({test: /\.(js|vue)$/,loader: 'eslint-loader',enforce: 'pre',include: [resolve('src'), resolve('test')],options: {formatter: require('eslint-friendly-formatter'),emitWarning: !config.dev.showEslintErrorsInOverlay}})//这个是代码规范检查module.exports = {context: path.resolve(__dirname, '../'),entry: {app: ['babel-polyfill', './src/main.js']},output: {path: config.build.assetsRoot,filename: '[name].js',publicPath: process.env.NODE_ENV === 'production'? config.build.assetsPublicPath: config.dev.assetsPublicPath},resolve: {extensions: ['.js', '.vue', '.json'],alias: {'vue$': 'vue/dist/vue.esm.js','@': resolve('src'),}},module: {rules: [...(config.dev.useEslint ? [createLintingRule()] : []),{test: /\.vue$/,//解析vue 文件loader: 'vue-loader',options: vueLoaderConfig},{test: /\.js$/,//解析js 文件loader: 'babel-loader',include: [resolve('src'), resolve('test')]},{test: /\.svg$/,//解析svg文件并生成到对应的目录loader: 'svg-sprite-loader',include: [resolve('src/icons')]},{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: 'url-loader',exclude: [resolve('src/icons')],options: {limit: 10000,name: utils.assetsPath('img/[name].[hash:7].[ext]')}},{test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,loader: 'url-loader',//这些类型文件加载并hash化options: {limit: 10000,name: utils.assetsPath('media/[name].[hash:7].[ext]')}},{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,name: utils.assetsPath('fonts/[name].[hash:7].[ext]')}}]}
gulp打包
// 创建版本号(年月日时分) 为后来的打包自动生成一个序列做准备(function () {var d = new Date();var yy = d.getFullYear().toString().slice(2);var MM = d.getMonth() + 1 >= 10 ? (d.getMonth() + 1) : '0' + (d.getMonth() + 1);var DD = d.getDate() >= 10 ? d.getDate() : '0' + d.getDate();var h = d.getHours() >= 10 ? d.getHours() : '0' + d.getHours();var mm = d.getMinutes() >= 10 ? d.getMinutes() : '0' + d.getMinutes();version = yy + MM + DD + h + mm;versionPath = distPath + '/' + version;})();// 编译gulp.task('build', $.shell.task([ 'node build/build.js' ]));// 创建版本号目录gulp.task('create:versionCatalog', ['build'], function () {return gulp.src(`${distPath}/static/**/*`).pipe(gulp.dest(`${versionPath}/static/`))});// 替换${versionPath}/static/js/manifest.js window.SITE_CONFIG.cdnUrl占位变量gulp.task('replace:cdnUrl', ['create:versionCatalog'], function () {return gulp.src(`${versionPath}/static/js/manifest.js`).pipe($.replace(new RegExp(`"${require('./config').build.assetsPublicPath}"`, 'g'), 'window.SITE_CONFIG.cdnUrl + "/"')).pipe(gulp.dest(`${versionPath}/static/js/`))});// 替换${versionPath}/static/config/index-${env}.js window.SITE_CONFIG['version']配置变量gulp.task('replace:version', ['create:versionCatalog'], function () {return gulp.src(`${versionPath}/static/config/index-${env}.js`).pipe($.replace(/window.SITE_CONFIG\['version'\] = '.*'/g, `window.SITE_CONFIG['version'] = '${version}'`)).pipe(gulp.dest(`${versionPath}/static/config/`))});// 合并${versionPath}/static/config/[index-${env}, init].js 至 ${distPath}/config/index.jsgulp.task('concat:config', ['replace:version'], function () {return gulp.src([`${versionPath}/static/config/index-${env}.js`, `${versionPath}/static/config/init.js`]).pipe($.concat('index.js')).pipe(gulp.dest(`${distPath}/config/`))});gulp.task('default',function () {// 获取环境配置del([distPath]);env = process.env.npm_config_qa ? 'qa' : process.env.npm_config_uat ? 'uat' : 'prod'// 开始打包编译gulp.start(['build', 'create:versionCatalog', 'replace:cdnUrl', 'replace:version', 'concat:config'], function () {// 清除, 编译 / 处理项目中产生的文件del([`${distPath}/static`, `${versionPath}/static/config`])})});
以后慢慢解释
