一、webpack基本安装

1、创建webpack项目目录如webpackDemo,并进入webpackDemo;

2、 在node已经安装的前提下,打开命令行控制器,输入如下命令:

npm init -y
npm install webpack webpack-cli --save-dev //安装webpack webpack-cli
(MacOS: sudo npm install webpack webpack-cli -g,sudo npm isntall webpack webpack-cli --save-dev)

命令执行结束后,会生成package.json、package_lock.json、node_modules文件。然后手动创建src目录与package.json平级,src目录下有index.html ,index.js 。

注:npm使用的是淘宝镜像,使用命令 npm install --registry=https://registry.npm.taobao.org express (临时使用);

  (MacOS 如果上面命令不生效,可以使用此命令: npm config set registry https://registry.npm.taobao.org).

二、webpack概念

1、 webpack有四个核心概念:entry(入口) 、output(输出)、loader、plugin(插件)。

entry(入口)

告诉webpack构建内部依赖图开始的模块;可以指定单入口起点文件或多入口起点文件。

module.exports = {
entry:"./src/index.js"
}

output(输出

告诉webpack输出创建的bundles,以及如何命名文件。指定编译后的输出文件路径。

const OUTPUT_FILE_NAME = "dist"
module.exports = {
entry:"./src/index.js",
output: {
filename: "[name].[contenthash:10].js", //输出文件名称, hash解决缓存问题
path: path.resolve(__dirname,'dist') //输出文件路径
}
}

loader

loader可以让webpack可以处理非JavaScript文件,webpack本身只能处理JavaScript。

webpack配置loader有两个目标:

a).  test属性,用于被对应的loader进行转换的某个和某些文件;

b).  use属性,表示进行转换时,应该使用哪个loader;

module.exports = {
output: {
filename: "[name].[contenthash:10].js", //输出文件名称, hash解决缓存问题
path: path.resolve(__dirname, OUTPUT_FILE_NAME) //输出文件路径
},
module: {
rules: [{
//整理html的img资源,
test: /\.html$/,
use: ["html-loader"]
},
{
//处理css资源
test: /\.css$/,
use: ["css-loader", "style-loader"]
},
{
//处理JS资源
test: /\.jsx?$/,
use: ['file-loader']
}]
}
}

插件plugins

loader用于转换某些类型,插件用于执行更广泛的任务。若使用一个插件,只需require(),然后添加到数组中。

module.exports = {
...,
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
hash: true
}),
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname,'dist')
}) ]
}

附全部代码:

package.json

{
"name": "webpack_demo",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "webpack --watch",
"start": "webpack --config webpack.config.js",
"build": "webpack --config webpack.config.pro.js"

},
"keywords": [],
"author": "",
"license": "ISC"
}

webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtarctPlugin = require("mini-css-extract-plugin"); //将css从js中提取出来 const OUTPUT_FILE_NAME = "dist";
module.exports = {
entry: "./src/index.js",
output: {
filename: "[name].[contenthash:10].js", //输出文件名称,hash解决缓存问题,具体可见下面的解释
path: path.resolve(__dirname, OUTPUT_FILE_NAME) //输出文件路径
}, mode: "development", //开发环境,生产环境使用"production"
module: {
rules: [{
//整理html的img资源,
test: /\.html$/,
use: ["html-loader"]
},
{
//处理css资源
test: /\.css$/,
use: [
//将css文件整合到JS文件中
"css-loader",
//创建style标签,将样式放入
"style-loader",
// css兼容性处理:postcss-->postcss-loader postcss-preset-env
]
},
{
//处理JS资源
test: /\.js$/,
exclude: /node_modules/, //处理除了nodde_modules里的js文件
loader: 'babel-loader' //用babel-loader处理 },
{
//处理图片资源
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
},
{
// exclude: /\.(css|js|html)$/, //排除正则内的资源
test: /\.(png|svg|jpg|gif)$/,
// 这里是匹配条件,每个选项都接收一个正则表达式或字符串
// test 和 include 具有相同的作用,都是必须匹配选项
// exclude 是必不匹配选项(优先于 test 和 include)
// 最佳实践:
// - 只在 test 和 文件名匹配 中使用正则表达式
// - 在 include 和 exclude 中使用绝对路径数组
// - 尽量避免 exclude,更倾向于使用 include
use: ['file-loader'],
// options: {
// name: "[hash:10].[ext]" //名字太长进行截取
// }
}
]
},
resolve: {
extensions: ['.js', '.json']
}, /*
source-map:外联
inline-source-map :
*/
devtool: "source-map", //告诉webpack提供源代码 plugins: [
// 将CSS文件从JS文件中提取出来
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname, OUTPUT_FILE_NAME)
}),
new HtmlWebpackPlugin({
template: "./src/index.html"
})
], devServer: {
port: 5000, //端口号
contentBase: OUTPUT_FILE_NAME, //可访问问文件
hot: true, //开启HMR热更新
https: true, //使用https
compress: true, // 启用压缩
// proxy: {
// "/": "http://localhost:3000", //使用代理路径
// }
}, /** code splitting 代码分割
* 当单入口时,可以将 node_modules中代码单独打包成一个chunk;
* 当多入口时,提取公共文件单独打包成一个chunk;
*/
optimization: {
splitChunks: {
chunks: "all"
}
} /**
* 缓存:
* Babel缓存
* cacheDirectory:true
* -->让第二次打包更快
* 文件资源缓存:
* hash :每次webpack构建是会生成一个唯一的hash值;
* 问题:js和css使用同一个hash值,会导致缓存失效,可能值改变一个文件;
* chunkhash:根据chunk生成的hash值,如果打包来自同一个chunk,那么hash是一样的
* 问题:chunkhash是一样的,因为css是在js中被引用的,属于同一个chunk;
* contenthash:根据文件内容生成hash值,不同文件的hash值不一样;
* -->让代码上线运行缓存更好使用
*
*/ /**
* tree shaking:去除无用代码
* 前提: 1.必须使用ES6模块化 2.开启production环境
* 作用: 减少代码体积
*
* 在package.json中设置:
* sideEffects:false 所有代码都没有副作用(都可以进行tree shaking)
* 问题:可能会把css @babel/polyfill(副作用)文件干掉
* sideEffects:["*.css",".less"] 不会进行tree shaking
*/ /**
* HMR :hot module replacement 热模块
* 作用:一个模块发生变化指挥重新打包这个模块,并不重新打包所有。提高打包速度。
* 样式文件:可以通过HMR实现,style-loader已实现
* JS文件:默认不使用HMR功能-->修改JS文件代码,只能处理非入口文件。
* if(module.hot){
* module.hot.accept("index.js",()=>{
* //监听文件变化,一旦发生变法,其他地方不会重新打包,直接执行回调
* }))
* }
* Html文件:默认不使用HMR功能,同时会出问题(无需做HMR功能)
* 解决方案:修改entry入口,引入html文件
*
*
*/
}

wenpack.config.pro.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtarctPlugin = require("mini-css-extract-plugin"); //将css从js中提取出来
const OptiminizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); //压缩CSS
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const OUTPUT_FILE_NAME = "dist";
module.exports = {
entry: "./src/index.js",
output: {
filename: "js/[name].[contenthash:10].js", //输出文件名称,hash解决缓存问题,具体可见下面的解释
chunkFilename: 'js/[name].[contenthash:10].bundle.js', // 依赖文件名称
path: path.resolve(__dirname, OUTPUT_FILE_NAME), //输出文件路径
publicPath: '/' // 公共路径
},
mode: "production", //生产环境
module: {
rules: [{
test: /\.html$/,
use: ["html-loader"]
},
{
test: /\.css$/,
use: [MiniCssExtarctPlugin.loader, "css-loader"]
},
{
test: /\.jsx?$/,
exclude: /node_modules/, //处理除了nodde_modules里的js文件
loader: 'babel-loader' //用babel-loader处理es6
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader'],
}
]
},
devtool: "source-map", //告诉webpack提供源代码
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
hash: true
}),
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname, OUTPUT_FILE_NAME)
}),
/**
* optimize-css-assets-webpack-plugin 会使webpack中自带的JS压缩失效,需要重新配置UglifyJsPlugin
*/
new OptiminizeCssAssetsPlugin(),
], /** code splitting 代码分割
* 当单入口时,可以将 node_modules中代码单独打包成一个chunk;
* 当多入口时,提取公共文件单独打包成一个chunk;
*/
optimization: {
splitChunks: {
chunks: "all"
}
}
}

webpack配置打包的更多相关文章

  1. webpack配置打包vue文件

    1.首先全局安装node,和npm.检查是否安装成功 2.新建一个文件下,进入该文件夹. 前先执行 npm init -y 然后就会在文件夹下出现一个package.json文件 然后执行 npm i ...

  2. webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件

    一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...

  3. VUE 多页面打包webpack配置

      思路:多配置一个main的文件,用于webpack入口使用, 然后路由的导向也应该默认指向新组件,最后通过webpack构建出一个新的独立的html文件. 缺点:生成多个html会new出多个vu ...

  4. webpack配置自动打包重新运行npm run dev出现报错

    webpack配置自动打包重新运行npm run dev出现报错 运行npm run dev出现如下报错 Listening at http://localhost:8080(node:2328) U ...

  5. webpack项目打包配置

    webpack.config.js 文件中,其中“plugins”最为重要 var path = require("path"); const webpack = require( ...

  6. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  7. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  8. Webpack配置示例和详细说明

    /* * 请使用最新版本nodejs * 默认配置,是按生产环境的要求设置,也就是使用 webpack -p 命令就可以生成正式上线版本. * 也可以使用 webpack -d -w 命令,生成用于开 ...

  9. vue-cli#2.0 webpack 配置分析

    目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-s ...

  10. webpack独立打包与缓存处理

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 先前写了一篇webpack入门的文章<webpack入门必知必会>,简单介绍了webpa ...

随机推荐

  1. Hexo博客Next主题配置加载优化性能提升

    主题源加载优化 把在NexT主题的_config.yml里面的: # Uri of fonts host. E.g. //fonts.googleapis.com (Default) host: 改为 ...

  2. python开发之远程开发工具对比

    前言 除了本地开发外,还有一种常见的开发方式就是远程开发,一般情况是一台Windows或mac笔记本作为日常使用的电脑,另有一台linux服务器作为开发服务器.开发服务器的性能往往较强,这样远程开发的 ...

  3. 揭秘 .NET 中的 TimerQueue(上)

    前言 TimerQueue 是.NET中实现定时任务的核心组件,它是一个定时任务的管理器,负责存储和调度定时任务.它被用于实现很多 .NET 中的定时任务,比如 System.Threading.Ti ...

  4. GoFrame v2.5 版本发布,企业级 Golang 开发框架

    大家好啊,GoFrame 框架今天发布了 v2.5.0 正式版本啦! 本次版本主要是对已有功能组件以及开发工具上的改进工作.其中,开发工具新增了 gf gen ctrl 命令,以规范化定义.开发 AP ...

  5. Unity UGUI的VerticalLayoutGroup(垂直布局)组件的介绍及使用

    Unity UGUI的VerticalLayoutGroup(垂直布局)组件的介绍及使用 1. 什么是VerticalLayoutGroup组件? VerticalLayoutGroup是Unity ...

  6. React报错:You are running `create-react-app` 5.0.0, which is behind the latest release (5.0.1).

    错误 解决方案 说白了就是版本过低,升级下就好.或者按照提示卸载掉原来的版本,之后输入临时创建命令即可,如下图所示 参考链接 https://stackoverflow.com/questions/7 ...

  7. 图像阈值_有cv2.threshold,cv2.adaptiveThreshold 等。

    1.简单阈值 使用的函数:cv2.threshold (src, thresh, maxval, type) 注释: 与名字一样,这种方法非常简单.但像素值高于阈值时,我们给这个像素赋予一个新值(可能 ...

  8. wget: 未找到命令

    输入以下命令: yum -y install wget

  9. C++多线程中互斥量的使用

    多线程中互斥信号量(Mutex)的使用 1.0 互斥量的基本概念 1.1 Example \(\quad\)首先我们要明白,为什么会有互斥信号量的出现,在多线程编程中,不同的线程之间往往要对同一个数据 ...

  10. [nginx]proxy_cache缓存系统

    前言 proxy_cache是nginx内置的一个缓存系统,可实现减小后端负载的作用. 常用参数说明 参数 说明 proxy_cache_path 缓存文件路径.level表示目录层级,1:2表示两个 ...