package.json 配置如下:

{
"name": "rise-vue",
"version": "1.0.0",
"description": "rise vue",
"main": "index.js",
"scripts": {
"watch": "webpack --mode development --watch",
"dev": "webpack --mode development",
"build": "webpack --mode production",
"server": "webpack-dev-server --mode development --inline"
},
"author": "Double",
"license": "ISC",
"dependencies": {
"@nutui/nutui": "^2.1.1",
"axios": "^0.18.0",
"fastclick": "^1.0.6",
"mint-ui": "^2.2.13",
"mockjs": "^1.0.1-beta3",
"qs": "^6.7.0",
"vue": "^2.6.10",
"vue-router": "^3.0.2",
"vuex": "^3.1.0"
},
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"babel-loader": "^8.0.6",
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^0.28.11",
"cssnano": "^4.1.10",
"file-loader": "^1.1.11",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"json-loader": "^0.5.7",
"less": "^3.9.0",
"less-loader": "^4.1.0",
"mini-css-extract-plugin": "^0.4.5",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"postcss-loader": "^2.1.6",
"postcss-safe-parser": "^4.0.1",
"url-loader": "^1.1.2",
"vue-loader": "^15.7.0",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.10",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.7.1"
}
}

webpack.config.js配置如下:

'use strict';

const path = require("path"),
webpack = require('webpack'),
{ VueLoaderPlugin } = require("vue-loader"),
MiniCssExtractPlugin = require("mini-css-extract-plugin"),
HtmlWebpackPlugin = require("html-webpack-plugin"),
{ CleanWebpackPlugin } = require("clean-webpack-plugin"),
OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); function resolve (dir) {
return path.resolve(__dirname, dir);
}
// 获取命令参数,命令写在package.json中
let args = process.argv;
// 确定目录
let dist = resolve('dist'); // 获取插件
let plugins = [
// CSS提取 插件
new MiniCssExtractPlugin({
filename: "[name].[chunkhash].css",
chunkFilename: "[id].[chunkhash].css"
}),
new OptimizeCssAssetsPlugin({
assetNameRegExp: /[0-9a-zA-Z]+\.css$/g,
cssProcessor: require('cssnano'),
cssProcessorPluginOptions: {
preset: ['default', {
discardComments: { removeAll: true },
// 避免 cssnano 重新计算 z-index
safe: true,
//cssnano通过移除注释、空白、重复规则、过时的浏览器前缀以及做出其他的优化来工作,一般能减少至少 50% 的大小
//cssnano 集成了autoprefixer的功能。会使用到autoprefixer进行无关前缀的清理。默认不兼容ios8,会去掉部分webkit前缀,比如flex
//所以这里选择关闭,使用postcss的autoprefixer功能
normalizeUnicode: false,
parser: require('postcss-safe-parser'),
autoprefixer: false
}],
},
canPrint: true
}),
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'buyOil.html',
title: '选择油站',
chunks: ['buyOil','vendors'],
favicon:"./src/assets/favicon.ico",
inject: true
}),
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'buyShop.html',
title: '汽车免费保养',
chunks: ['buyShop','vendors'],
favicon:"./src/assets/favicon.ico",
inject: true
}),
new VueLoaderPlugin(),
new CleanWebpackPlugin()
];
if (!args.includes('--inline')) {
plugins.push(new webpack.IgnorePlugin(/\/mock$/));
} // webpack 配置
module.exports = {
// 入口文件
entry: {
buyOil: './src/main/buyOil.js',
buyShop: './src/main/buyShop.js',
},
// 输出
output: {
// 输出目录
path: dist,
//publicPath: '', 文件引用前缀
// 输出文件名,[name]与入口文件同名
filename: '[name]-[chunkhash].js'
},
resolve: {
extensions: ['.js','.vue'], // require 文件时可省略后缀 .js .vue
alias: {
'vue': 'vue/dist/vue.js', // 使用完整版的vue
'@': resolve('src'),
'@page': resolve('src/pages')
}
},
module: {
// 加载器配置
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
}, {
// 目标文件
test: /\.css$/,
use: [
// 使用这个插件,使得所有less 能被打入一个文件,而不是一个个style
MiniCssExtractPlugin.loader,
'css-loader', 'postcss-loader'
]
}, {
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader','postcss-loader','less-loader'
]
}, {
test: /\.(js)$/,
// 排除目标
exclude: /(node_modules)/,
loader: 'babel-loader',
options: {
babelrc: false,
presets:["@babel/preset-env"],
plugins: [
"@babel/plugin-transform-runtime",
"@babel/plugin-syntax-dynamic-import" // 动态引入文件插件,否则js不能使用import()
]
}
}, {
test: /\.(png|jpg|jpeg|gif|webp|svg)$/,
// 小于 8k的图片,输出为base64 dataurl
loader: 'url-loader?name=assets/images/[name].[hash:8].[ext]&limit=8192'
}, {
test: /\.(ttf|otf|woff|eot)$/,
// 字体转 dataurl
loader: 'url-loader?name=assets/fonts/[name].[hash:8].[ext]&limit=1024'
}, {
test: /\.json$/,
loader: 'json-loader'
}
]
},
optimization: {
// 模块拆分提取规则
splitChunks: {
/* 同时满足以下条件才拆分成单独文件 */
chunks: 'async', // 引用类型,all 表示 initial引用 + async引用
minSize: 30000, // 压缩前体积大于30000B
minChunks: 1, // 引用数量大于 1
maxAsyncRequests: 5, // 异步引用数量小于5
maxInitialRequests: 3, // 初始引用数量小于3
/**********************************/
name: true,
// 缓存组
cacheGroups: {
vendors: {
name: 'vendors',
priority: 10, // 提取到本组的优先级
/* 将符合以下条件的模块提取到组 */
chunks: "all",
test: /node_modules\\/,
minSize: 30000,
minChunks: 1
}
}
}
},
// 额外插件
plugins: plugins,
// 配置 webpack-dev-server
devServer:{
historyApiFallback: true, // 允许路由
inline: true,
port: 8090,
disableHostCheck: true,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true,
"Access-Control-Allow-Methods": "POST, GET, PUT, OPTIONS",
"Access-Control-Allow-Headers": "X-PINGOTHER, Content-Type"
},
},
performance: {
hints: false // 枚举
},
// 对webpack输出信息的配置,可以减少一些不必要的输出
stats: {
children: false
}
};

搭建的一套vue打包方案,方便记录一下的更多相关文章

  1. 自己家里搭建NAS服务器有什么好方案?

    转自:https://www.zhihu.com/question/21359049 作者:陈二发链接:https://www.zhihu.com/question/21359049/answer/6 ...

  2. 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】

    背景描述 根据项目需求,现要在团队内部搭建一个统一的打包平台,实现对iOS和Android项目的打包.而且为了方便团队内部的测试包分发,希望在打包完成后能生成一个二维码,体验用户(产品.运营.测试等人 ...

  3. cordova+vue打包webapp

    使用cordova+vue打包webapp,可以快速给网页套上一个android和ios壳子,完成一个app的开发. 1. 环境准备. (1)node.js  下载地址: https://nodejs ...

  4. vue打包dist文件时,图片找不到

    1.vue打包dist文件时,图片找不到,无法像在本地一样查看 问题描述: 本地代码:<div class="icon"><img :src="'../ ...

  5. vue开发搭建(npm安装 + vue脚手架安装)

    一.概念 1.npm:  Nodejs下的包管理器. 2.webpack: 它主要的用途是通过CommonJS的语法,把所有浏览器端需要发布的静态资源,做相应的准备,比如资源的合并和打包. 3.vue ...

  6. JS 模块化和打包方案收集

    1.这里想讨论的是拆分规则,不是在问哪个工具怎么使用.2.这里没有在想找正确答案,因为感觉这个问题要结合具体业务场景. 随着项目开发越来越大,一开始代码全打包到一个文件的方式,让文件越来越大,接下来要 ...

  7. Vue打包后出现一些map文件

    Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1,运行  cnpm run build  开始 ...

  8. Vue打包优化之分析工具webpack-bundle-analyzer

    // 1. 安装 cnpm install webpack-bundle-analyzer --save-dev // 2. 在/build/webpack.prod.conf.js文件中引入 con ...

  9. vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接

    vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接 需求:自己app打开的登录页面不显示app下载链接.其他地方打开判断android手机的跳转到android下载页链 ...

随机推荐

  1. CF891E Lust 生成函数

    传送门 设在某一次操作之后的\(a\)数组变为了\(a'\)数组,那么\(\prod\limits_{i \neq x} a_i = \prod a_i - \prod a_i'\).那么就不难发现我 ...

  2. ssm动态sql语句

    1.将上面的元素分为四组来演示,分别为:[if,where,trim],[if,set,trim],[choose,when,otherwise],[foreach] ________________ ...

  3. vim打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...

  4. 1 matplotlib绘制折线图

    from matplotlib import pyplot as plt #设置图形大小 plt.figure(figsize=(20,8),dpi=80) plt.plot(x,y,color=&q ...

  5. mysql 5.7 非正常安装,无法启动 服务没有报告任何错误

    以前,完整安装mysql5.7程序时,由于程序太大,可以将安装缓存目录中的安装文件(较小)复制出来后,留以后使用. mysql--win32.msi 2 mysql-5.7.17-winx64.msi ...

  6. Java—十进制数对n进制数转换

    import java.math.BigInteger;import java.util.Scanner; /** * @auther Aohui * @create 2019-11-06-15:33 ...

  7. python入学代码

    liwenhu=100 if liwenhu>=90: print("你很棒") elif liwenhu>=80: print("你很不错") e ...

  8. 换个语言学一下 Golang (6)——数组,切片和字典

    在上面的章节里面,我们讲过Go内置的基本数据类型.现在我们来看一下Go内置的高级数据类型,数组,切片和字典. 数组(Array) 数组是一个具有相同数据类型的元素组成的固定长度的有序集合.比如下面的例 ...

  9. RHEL6搭建网络yum源软件仓库

    RHEL的更新包只对注册用户生效,所以需要自己手动改成Centos的更新包 一.查看rhel本身的yum安装包 rpm -qa | grep yum 二.卸载这些软件包 rpm -qa | grep ...

  10. 【开发工具】- Java开发必知工具

    压力测试工具_JMeter 作用 1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC). 2.完全的可移植性和100% 纯java. 3.完全 Swi ...