官网

https://webpack.docschina.org/concepts/

怎么理解webpack

简单来说,webpack是一个静态资源打包工具;
有入口文件,出口文件,打包逻辑等配置,使其能够分析项目结构,找到js模块 以及其他一些浏览器不能直接运行的拓展语言(Scss,TypeScript)等,并将他们打包为合适的格式以供浏览器使用。

webpack核心概念

入口(entry)

webpack 配置入口文件,指示webpack 应该使用哪个模块来作为其构建内部 依赖图的开始。
webpack.config.js

  1. module.exports = {
  2. //简单写法
  3. entry : './src/index.js',
  4. //数组写法
  5. entry: [
  6. './src/file_1.js',
  7. './src/file_2.js'
  8. ],
  9. //对象写法,这是应用程序中定义入口的最可扩展的方式(这点具体了解不深入)
  10. entry: {
  11. app: './src/app.js',
  12. adminApp: './src/adminApp.js'
  13. }
  14. }

输出(output)

output属性告诉webpack在哪里输出它所创建的buddle,以及如何命名这些文件。
tips:如果没有配置,则主要输出文件的默认值 ‘./dist/main.js’,其他生成文件默认放在 ‘./dist’ 文件夹

  1. const path = require('path')
  2. module.exports = {
  3. output: {
  4. filename : 'test.js',
  5. path: path.resolve(__dirname,'dist')
  6. }
  7. //如果有多个入口起点,则需要使用占位符来确保文件的名称唯一性
  8. output: {
  9. filename: '[name.js]',
  10. path: __dirname + '/dist'
  11. }
  12. }
  1. path 是node.js 的核心模块,用于操作文件路径

loader

loader 用于对模块的源代码进行转换,可以在 import 或 loader 模块时预处理文件

  1. //使用前先安装对应的loader
  2. npm install css-loader ts-loader --save-dev
  3. //webpack.js,指示webpack对每个.css使用css-loader,.ts使用ts-loader
  4. module.exports = {
  5. module: {
  6. rules: [
  7. { test: /\.css$/, use: 'css-loader' },
  8. { test: /\.ts$/, use: 'ts-loader' }
  9. ]
  10. }
  11. };

loader有多种使用方式:
1.配置方式,在moudle里指定多个loader,执行顺序为 从右到左(或从下到上)

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.css$/,
  6. use: [
  7. { loader: 'style-loader' },
  8. {
  9. loader: 'css-loader',
  10. options: {
  11. modules: true
  12. }
  13. },
  14. { loader: 'sass-loader' }
  15. ]
  16. }
  17. ]
  18. }
  19. };
  20. //先执行sass-loader,然后css-loader,最后 style-loader

2.内联方式

  1. import Styles from 'style-loader!css-loader?modules!./styles.css';

3.CLI方式

  1. webpack --module-bind pug-loader --module-bind 'css=style-loader!css-loader'

plugin

插件是webpack的支柱功能。插件的目的在于解决loader无法实现的其他事,包括打包、优化、压缩,重新定义环境中的变量等

  1. const {CleanWebpackPlugin} = require('clean-webpack-plugin') //先npm安装
  2. module.exports = {
  3. plugins: [
  4. new CleanWebpackPlugin()
  5. ]
  6. }

模式(mode)

通过选择 development, production 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production。

  1. module.exports = {
  2. mode: 'production'
  3. };

others

1. npx webpack

npx 会执行依赖包的二进制文件。它会自动查询当前依赖包里的可执行文件,如果找不到就去path里找,如果还找不到就会自动安装,它甚至支持运行远程仓库的可执行文件
npm version >= 5.2.0 开始,自动安装了npx。举例说明:

  1. //非全局安装
  2. npm i webpack -D
  3. //如果要执行 webpack 的命令,如下
  4. ./node_modules/.bin/webpack -v

有了npx后

  1. npm i webpack -D //非全局安装
  2. npx webpack -v

2. —save-dev,—save

npm install moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 不会将模块依赖写入devDependencies或dependencies 节点。
  3. 运行 npm install 初始化项目时不会下载模块。

npm install -g moduleName 命令

  1. 安装模块到全局,不会在项目node_modules目录中保存模块包。
  2. 不会将模块依赖写入devDependencies或dependencies 节点。
  3. 运行 npm install 初始化项目时不会下载模块。

npm install -save moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入dependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install —production或者注明NODE_ENV变量值为production时,会自动下载模块到node_modules目录中。

npm install -save-dev moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入devDependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install —production或者注明NODE_ENV变量值为production时,不会自动下载模块到node_modules目录中。

image.png