1、webpack的配置文件webpack.config.js

//const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {mode:'none',entry: './src/index.js',output: {path: __dirname + '/dist',filename: 'dist.js'},
}

上面代码是一个最最基本的webpac配置文件,
entry是指定要打包的入口文件,(多页面可以有多个入口
output指定打包之后文件的路径和文件名(只有一个出口
(其中几个目录请手动新建:src是放我们源码的文件夹,dist是放我们编译后文件的文件夹。)

有了基本的webpack.config.js,我们用webpack来打包就简单了,可以直接执行下面命令:

webpack

webpack默认就会去寻找根目录下的webpack.config.js文件。

打包成功,dist/js文件夹下就会生成一个dist.js。

2、我们也可以指定webpack的配置文件名

webpack.config.js是webpack默认的配置文件名,如果我们有一个webpack.dev.config.js配置,又如何让webpack来读取它呢?
只需要在执行打包命令的时候,加一个参数: --config `文件名

webpack --config `webpack.dev.config.js

3、webpack配合npm

还记得我们在npm init初始化之后,生成了一个package.json文件么?我们现在终于要用到它了。
我们在package.json文件中,增加一个scripts:

  "scripts": {"test": "echo \"Error: no test specified\" && exit 1","webpack": "webpack --config webpack.config.js"},

上面我们增加了一个webpack项,我们可以看出其值其实也是执行的webpack命令
既然我们是要webpack和npm配合,那么上面的配置到底有什么作用呢?
我们可以通过npm来调用webpack来,执行下面命令,同样完成webpack打包操作:

npm run webpack

npm run xxxx,其中 xxxx 就是我们上面配增加的scripts命令

4、webpack配置的entry

entry是webpack打包的入口指示。

//entry:'路径',
entry:'./src/script/main.js',

它有三种形式:

1)、最简单的就是一个string,也是只有一个入口文件。我们前面已经见识了。

entry:'./src/script/main.js',

这种形式,你的所有的依赖,都在这个文件main.js中引入进来

2)、数组的形式

entry:['./entry1','./entry2']

3)、对象的形式

entry: {page1:'./page1',page2:['./entry1','./entry2']
}

上面 数组的形式和对象形式,都2个入口。

5、webpack配置的output

然后我们把webpack.config.js中output段修改如下:

  output:{path:'./dist/js',filename:'[name]-[hash].js'  //这样我们打包之后的文件就是**main-本次打包的hash值.js**。}

这样我们打包之后的文件就是 main-本次打包的hash值.js

还可以:

filename:'[name]-[chunkhash].js'

这其中的hash值,我们可以认为是版本号,也就是说,只有在我们的文件改变了的时候,这个hash值才会有变化。最后打包的文件名就是随机的。

6、webpack配置的plugins

使用插件的方法:配置plugins:

1、要使用某个插件,需要通过npm安装它,然后在webpack.config.js中的plugins关键字部分添加该插件的一个实例(plugins是一个数组,new一个插件即可)

如添加一个实现版权声明的插件:

module.exports = {mode: 'none',entry:  __dirname + "/app/main.js",output: {...},module: {loaders: [{ test: /\.json$/, loader: "json" },{ test: /\.js$/, exclude: /node_modules/, loader: 'babel' },{ test: /\.css$/, loader: 'style!css?modules!postcss' }//这里添加PostCSS]},postcss: [require('autoprefixer')],//添加该插件的一个实例plugins: [new webpack.BannerPlugin("Copyright Flying Unicorns inc.")  ],devServer: {...}
}

2、几个常用的插件

1) HtmlWebpackPlugin

这个插件的作用是依据一个简单的模板,帮助生成最终的Html5文件,这个文件中自动引用了打包后的JS文件。每次编译都在文件名中插入一个不同的哈希值。

安装命令:npm install --save-dev html-webpack-plugin

这个插件自动完成了之前手动做的一些事情,在正式使用之前需要对项目结构做一些改变:

① 移除public文件夹,利用此插件,HTML5文件会自动生成,此外CSS已经通过前面的操作打包到JS中了。

② 在app目录下,创建一个HTML文件模板index.tmpl.html,这个模板包含title等其它需要的元素,在编译过程中,本插件会依据此模板生成最终的HTML页面,会自动添加所依赖的 css, js,favicon等文件,模板源代码如下:

<!DOCTYPE html>
<html lang="en"><head></head><body><div id='root'></div></body>
</html>

③ 更新webpack的配置文件,方法同上,新建一个build文件夹用来存放最终的输出文件。

var webpack = require('webpack');var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {devtool: 'eval-source-map',entry:  __dirname + "/app/main.js",output: {path: __dirname + "/build",filename: "bundle.js"},module: {loaders: [{ test: /\.json$/, loader: "json" },{ test: /\.js$/, exclude: /node_modules/, loader: 'babel' },{ test: /\.css$/, loader: 'style!css?modules!postcss' }]},postcss: [require('autoprefixer')],plugins: [new HtmlWebpackPlugin({template: __dirname + "/app/index.tmpl.html"//new 一个这个插件的实例,并传入相关的参数})],devServer: {colors: true,historyApiFallback: true,inline: true}
}

2) Hot Module Replacement
Hot Module Replacement(HMR)也是webpack里很有用的一个插件,它允许在修改组件代码后,自动刷新实时预览修改后的效果。
在webpack中实现HMR也很简单,只需要做两项配置

① 在webpack配置文件中添加HMR插件;

② 在Webpack Dev Server中添加“hot”参数。

不过配置完这些后,JS模块其实还是不能自动热加载的,还需要在JS模块中执行一个Webpack提供的API才能实现热加载,虽然这个API不难使用,但是如果是React模块,使用已经熟悉的Babel可以更方便的实现功能热加载。

具体实现方法如下:

① Babel和webpack是独立的工具;

② 二者可以一起工作;

③ 二者都可以通过插件拓展功能;

④ HMR是一个webpack插件,它让你能浏览器中实时观察模块修改后的效果,但是如果你想让它工作,需要对模块进行额外的配额;

⑤ Babel有一个叫做react-transform-hrm的插件,可以在不对React模块进行额外的配置的前提下让HMR正常工作。

var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {devtool: 'eval-source-map',entry: __dirname + "/app/main.js",output: {path: __dirname + "/build",filename: "bundle.js"},module: {loaders: [{ test: /\.json$/, loader: "json" },{ test: /\.js$/, exclude: /node_modules/, loader: 'babel' },{ test: /\.css$/, loader: 'style!css?modules!postcss' }]  },postcss: [require('autoprefixer')],plugins: [new HtmlWebpackPlugin({template: __dirname + "/app/index.tmpl.html"}),new webpack.HotModuleReplacementPlugin()//热加载插件],devServer: {colors: true,historyApiFallback: true,inline: true,hot: true}
}

安装react-transform-hmrnpm install --save-dev babel-plugin-react-transform react-transform-hmr

配置Babel :

{"presets": ["react", "es2015"],"env": {"development": {"plugins": [["react-transform", {"transforms": [{"transform": "react-transform-hmr","imports": ["react"],"locals": ["module"]}]}]]}}
}

使用React时,可以热加载模块了。

webpack配置文件:webpack.config.js(一)相关推荐

  1. VUE-CLI可选的配置文件vue.config.js

    VUE-CLI可选的配置文件 vue.config.js 整理自官方文档,仅供博文https://blog.csdn.net/qq_28550263/article/details/120633610 ...

  2. vue - vue的配置文件vue.config.js介绍

    文章目录 前言: 常用配置项如下: 常用配置项说明: 前言: 注意: 使用 vue-cli 3.x 以上的脚手架创建的 vue 项目不再有 build 文件夹,若需要进行相关配置,需在项目目录下新建文 ...

  3. Vue中使用配置文件vue.config.js简化文件夹路径

    一.首先创建vue.config.js(名字不能更改) 二.使用vue.config.js为常用的文件路径进行标识 module.exports = {configureWebpack: {resol ...

  4. (三)01 -Vue项目打包发布移动App——vue.config.js中配置相对路径publicPath为空字符串 在public中添加HBuilderX的打包配置文件manifest.json

    Vue 项目打包发布移动 App--npm run build打包 & vue.config.js文件中配置相对路径publicPath为空字符串 & 在 public中添加HBuil ...

  5. 初识webpack与webpack环境搭建

    文章目录 认识webpack配置文件 webpack配置结构 环境搭建安装Node.js和NPM NVM安装 Nodejs和NPM安装 环境搭建安装webpack和webpack-cli 创建空目录和 ...

  6. tailwindcss 官网(六)定制:配置( `tailwind.config.js `、-p、important、核心插件、`resolveConfig`)、主题 `theme` 配置

    tailwindcss 官网(六)定制:配置( tailwind.config.js.-p.important.核心插件.resolveConfig).主题 theme 配置 文章目录 tailwin ...

  7. webpack 3 零基础入门教程 #4 - webpack 的配置文件 webpack.config.js

    在命令行中运行 webpack 命令确实可以实现 webpack 的功能,但是我们一般不这么做,我们要用配置文件来处理. 我们把之前学到的知识用 webpack 的配置文件来实现,配置文件的名字叫 w ...

  8. vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

    1.下载vue-cli [html] view plain copy npm install vue-cli -g vue-cli的使用与详细介绍,可以到github上获取https://github ...

  9. Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)——vite.config.js配置文件

    Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)--vite.config.js配置文件 当前版本 vite@2.3.7和vite@2.4.4 "vite" ...

最新文章

  1. Vue-Layout:可视化布局、自动生成代码工具
  2. SCDPM2012功能测试(4)—配置通知
  3. 第二章:2.1 微分方程、差分方程求解(举例)
  4. yolo配置文件以及训练时各参数的定义
  5. Drupal 为前台(Front page)页面添加区域(Regions)
  6. 粗谈MySQL事务的特性和隔离级别
  7. 面向对象设计原则之2-开放闭合原则
  8. ctfmon是什么启动项_启动项里ctfmon是什么意思,干什么用的??
  9. c语言std变量,10-C ++中的变量
  10. android空格对齐
  11. java8 collections_关于Jdk7与Jdk8对Collections进行分组的区别
  12. 假设检验之t检验详解
  13. 2021-11-13 变电站综合自动化 二次系统安全
  14. php调用海康人脸识别摄像机,海康网络摄像机SDK对接
  15. 多聚赖氨酸大鼠血清白蛋白纳米粒|微囊藻毒素小麦麦清白蛋白纳米粒|雌三醇乳清白蛋白纳米粒Estriol-whey protein
  16. CAD删除全部文字(网页版)
  17. matlab实训助教总结,助教自我评价简历范文
  18. {“error“:“incorrect region, please use up-z1.qiniup.com“}
  19. Linux 文件系统(2)sda sdb 和 SATA IDE SCSI
  20. 认真学习设计模式之委派模式(Delegate Pattern)

热门文章

  1. java面试大全(八月助力 offer)
  2. 【2021年总结】继往与开来、遗憾与期待(目前大四)
  3. 基于Python实现的神经网络分类MNIST数据集
  4. 【学习笔记】类AXI协议中的outstanding概念学习与计算
  5. 1.5 haas506 2.0开发教程-driver-ADC
  6. MIUI开发版和稳定版有什么区别
  7. java web数据库设计_java web的新闻发布系统的数据库设计
  8. 笔记本设置合上不睡眠
  9. javascript全局变量和局部变量详解
  10. 代码优化-之-Base64编码函数的极限优化挑战