webpack前端自动化构建工具
博主不易,不求赞赏,希望把自己遇到的难点写出来,以及希望自己能有能力写出一篇不错的博文。
前端构建工具本人 bootstrap+jquery用gulp
vue+element 用webpack
本人最近写的一个vue项目的目录结构

一:package.json
{
"name": "szhong",
"version": "1.0.0",
"description": "这是三中建材官网",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --progress --config webpack.config.dev.js --port 6008 --open --hot",
"build": "webpack --progress --config webpack.config.prod.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.18.0",
"element-ui": "^2.3.4",
"iview": "^2.13.0",
"jquery": "^3.3.1",
"v-distpicker": "^1.0.16",
"vue": "^2.5.16",
"vue-lazyload": "^1.2.3",
"vue-router": "^3.0.1",
"moment": "^2.22.1",
"vuex": "^3.0.1"
},
"devDependencies": {
"babel-core": "^6.26.2",
"babel-loader": "^7.1.4",
"babel-plugin-component": "^1.1.0",
"babel-plugin-import": "^1.7.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-preset-env": "^1.6.1",
"clean-webpack-plugin": "^0.1.19",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^0.20.3",
"url-loader": "^1.0.1",
"vue-loader": "^14.2.2",
"vue-template-compiler": "^2.5.16",
"webpack": "^3.11.0",
"webpack-dev-server": "^2.11.2"
}
}
二:webpack.config.dev.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = {
entry: './src/main.js',//入口
module: {
rules: [
{
test: /\.vue$/,
use: ['vue-loader']
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(ttf|eot|woff|svg|jpg|png|gif)$/,
use: [
{
loader: 'url-loader'
}
]
}
]
},
devServer: {
overlay: true //报错的时候,在页面上弹出一个遮罩,并且把错误显示在上面
},
resolve: {
//给我们导入的文件自动按照从前到后的顺序加后缀
extensions: [".vue", ".js", ".json"]
},
plugins: [
//将来以template为模版,生成一个index.html并且发布到webpack-dev-server开启的node服务器上面去
new HtmlWebpackPlugin({
template: './template.html'
}),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
})
]
}
三:webpack.config.prod.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
const path = require('path')
//打包之前,删除dist目录
var CleanWebpackPlugin = require('clean-webpack-plugin')
//从bundle.js中抽离css
const ExtractTextPlugin = require("extract-text-webpack-plugin")
module.exports = {
entry: {
"axios":['axios'],
"quanjiatong":['vue','vue-router','vuex'],
"jquery":['jquery'],
"moment":['moment'],
"v-distpicker":['v-distpicker'],
"vue-lazyload":['vue-lazyload'],
"bundle":'./src/main.js' //别忘记了我们自己的业务代码
},//多入口配置
output:{//生产阶段,必须要设置它
path:path.resolve(__dirname,"dist"),
filename:'js/[name]-[hash:5].js'
},
module: {
rules: [
{
test: /\.vue$/,
use: ['vue-loader']
},
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: {
loader:'css-loader',
options:{
minimize: true, //在抽取css的时候同时进行压缩
publicPath:'dist/css'
}
}
})
},
{
test: /\.(jpg|png|gif)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,//打包的阀值,如果我们的资源小于阀值,就会打包进入bundle.js,如果静态资源超过阀值,单独提取出来,不打包进入bundle.js,阀值根据公司的需要来设置
name:'statics/imgs/[name]-[hash:5].[ext]'
}
}
]
},
{
test: /\.(ttf|eot|woff|svg)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,//打包的阀值,如果我们的资源小于阀值,就会打包进入bundle.js,如果静态资源超过阀值,单独提取出来,不打包进入bundle.js,阀值根据公司的需要来设置
name:'statics/fonts/[name]-[hash:5].[ext]'
}
}
]
},
{
test: /\.js$/,
exclude: /node_modules/, //排除node_modules里面文件,一定要加上
loader: "babel-loader"
}
]
},
resolve: {
//给我们导入的文件自动按照从前到后的顺序加后缀
extensions: [".vue", ".js", ".json"]
},
plugins: [
//打包之前,删除dist目录,写在其它插件前面
new CleanWebpackPlugin('dist'),
//将来以template为模版,生成一个index.html并且发布到webpack-dev-server开启的node服务器上面去
new HtmlWebpackPlugin({
template: './template.html',
minify:{
removeComments: true,//压缩注释
minifyJS: true,//压缩js
minifyCSS: true,//压缩css
collapseWhitespace: true,//去除空格
}
}),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
}),
//设置当前环境为生产环境
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"'
}
}),
//压缩,必须先转成es5,再压缩
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false, //压缩掉警告
drop_debugger: true,
drop_console: true //去除console.log
},
comments: false //去掉版权信息等注释
}),
//抽离第三方包的,这里不要写bundle.js
new webpack.optimize.CommonsChunkPlugin({
name: ["vue-lazyload", "v-distpicker", "moment", "jquery", "quanjiatong", "axios"],
// filename: "vendor.js"
// (给 chunk 一个不同的名字)
minChunks: Infinity, //可以接一个数字,比如2,只有我们的第三方包至少被引用了2次,我才抽,如果只有一次,就不抽,Infinity代表不管你是使用了多少次我都抽取
// (随着 entry chunk 越来越多,
// 这个配置保证没其它的模块会打包进 vendor chunk)
}),
//把抽离的css放在哪里去
new ExtractTextPlugin("css/styles-[hash:5].css"),
//只保留moment中的简体中文
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /zh-cn/)
]
}
webpack前端自动化构建工具的更多相关文章
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
- 前端自动化构建工具——gulp
gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...
- 前端自动化构建工具 Gulp 使用
一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...
- gulp前端自动化构建工具新手入门篇
很久没有更新博文了. 经过了一次年前吐血的赶项目,终于在年后回血了.趁着有空,新学到了一个前端自动化构建工具-gulp. 现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gul ...
- 前端自动化构建工具--Gulp&&Webpack
前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...
- 前端自动化构建工具-yoman浅谈
如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...
- gulp前端自动化构建工具
博主不易,不求赞赏,希望把自己遇到的难点写出来,以及希望自己能有能力写出一篇不错的博文. 前端构建工具本人 bootstrap+jquery用gulp vue+element 用webpack 引文 ...
- 前端自动化构建工具 gulp 学习笔记 一、
一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...
- 前端自动化构建工具webpack (一)之webpack安装 和 设置webpack.confi.js
目的: 模块化开发,组件化开发,让代码符合开发规范,更高效 webpack作用:从pack,就知道这是包的意思,比较专业点叫做前端自动化打包构建工具,代码错误检查,预处理,文件合并(打包),代码压缩 ...
随机推荐
- Agc017_D Game on Tree
传送门 题目大意 给定一棵树,$1$号节点为根,两个人轮流操作,每次选择一个根节点外的点,删掉它以及它的子树,不能操作者输,求两人均采用最优策略下先手胜利还是后手胜利. 题解 经典问题树上删边游戏,根 ...
- Agc016_D XOR Replace
传送门 题目大意 给定两个长为$n$的序列$A,B$你可以进行若干组操作,每次操作选定一各位置$x$,令$A_x$等于$A$的异或和. 问能否通过一定操作使得$A$成为$B$,如果能,求最小操作书数. ...
- bzoj3224Treap
Splay版本的会补... 在学了2个小时Splay之后深感Treap的优越 特地又花了20分钟打了个Treap 至于这些平衡树的优缺点 可以用平衡方式来直观的感受到 现在平衡树们面对着这样的一个问题 ...
- C/C++面试题总结(2)
C++部分: 1.static(静态)变量有什么作用? 2.virtual关键字用法 3.const有哪些作用 或<王道程序员求职宝典>P95 4.new/delete与malloc/fr ...
- BZOJ1033:[ZJOI2008]杀蚂蚁
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
- python为类定义构造函数
用python进行OO编程时, 经常会用到类的构造函数来初始化一些变量. class FileData: def __init__(self, data, name, type): ...
- Asp.net工作流workflow实战之书签(二)
1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...
- Python:urllib模块的urlretrieve方法
转于:https://blog.csdn.net/fengzhizi76506/article/details/59229846 博主:fengzhizi76506 1)功能: urllib模块提供的 ...
- 【转】 Pro Android学习笔记(五八):Preferences(2):CheckBoxPreference
目录(?)[-] CheckBox Preference xml文件 设备的存贮文件 复合preference 在ListPreference的例子中显示的是单选,如果是多选,可采用CheckBoxP ...
- HTTP 协议入门(转载)
作者:阮一峰 (@ruanyf) www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 ...