webpack

这东西想要学习好多次,但是都没有坚持啊学完,现在还是一头雾水,整备找教程学,但是好像和当前版本差别比较大,算了,这次跟着官方文档学,能学多少学多少。

概念
  • js程序的静态模块打包器,递归构建依赖关系图,其中包含程序包含的模块,把模块打包成一个或者多个bundle(捆,束缚)
  • 高度可配置,灵活性高
  • 四个核心概念 入口 输出 loader 插件
入口(entry)
简单,就是webpack从哪个模块开始构建依赖和打包,找相关依赖打包到dunles

**单个入口的写法** 
*entry: string|Array<string>* 就是entry:字符创或者字符串数组
要在**webpack.config.js**里面写
module.exports = {
  entry: './path/to/my/entry/file.js'
};
module.exports = config;

简写就不导出了

const config = {
  entry: {
    main: './path/to/my/entry/file.js'
  }
};

tip 当你向 entry 传入一个数组时会发生什么?
向 entry 属性传入「文件路径(file path)数组」将创建“多个主入口(multi-main entry)”。在你想要多个依赖文件一起注入,并且将它们的依赖导向(graph)到一个“chunk”时,传入数组的方式就很有用。
chunk:n.厚块; 部分; 相当数量; 知识块
v.将…分成数份; 将…组合; 发出“砰啷”(或“嚓卡”)声; 抛; 扔; 切分; 切割

简单说 就是多个入口一起构建模块依赖,用字符串数组给多个入口,将会创建多个主入口,一起一来到chunk

对象语法复杂,但是使得入口定义可扩展

const config = {
  entry: {
    app: './src/app.js',
    vendors: './src/vendors.js'
  }
};

app与vendor(第三方库)分离,创建的依赖图也彼此分离、相互独立

多页面应用程序
webpack 需要 3 个独立分离的依赖图
多页面应用,页面跳转,页面重新加载新文档,并且资源被重新下载

const config = {
  entry: {
    pageOne: './src/pageOne/index.js',
    pageTwo: './src/pageTwo/index.js',
    pageThree: './src/pageThree/index.js'
  }
};
输出(output)
  • 控制如何向硬盘写入编译文件,多个入口也只能指定一个输出
const config = {
  output: {
  //输出文件的文件名
    filename: 'bundle.js',
    //输出目录的绝对路径
    path: '/home/proj/public/assets'
  }
};

module.exports = config;

配置多个chunk,则使用占位符确保每个文件具有唯一的名称

{
  entry: {
    app: './src/app.js',
    search: './src/search.js'
  },
  output: {
    filename: '[name].js',
    path: __dirname + '/dist'
  }
}

// 写入到硬盘:./dist/app.js, ./dist/search.js
模式(mode)
  • mode: string
  • 提供 mode 配置选项,告知 webpack 使用相应模式的内置优化
module.exports = {
  mode: 'production'
};
  • development
  • 会将 process.env.NODE_ENV 的值设为 development。启用 NamedChunksPluginNamedModulesPlugin
  • production
  • 会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPluginUglifyJsPlugin
    在这里插入图片描述
loader
  • loader 用于对模块的源代码进行转换
  • 在import或者加载模块是预处理文件,不同语言文件转换为js,内联图像转换为 data URL
  • 安装
  • 使用 loader 告诉 webpack 加载 CSS 文件,或者将 TypeScript 转为 JavaScript
npm install --save-dev css-loader
npm install --save-dev ts-loader

然后指示 webpack 对每个 .css 使用 css-loader,以及对所有 .ts 文件使用 ts-loader:
webpack.config.js

module.exports = {
  module: {
    rules: [
      { test: /\.css$/, use: 'css-loader' },
      { test: /\.ts$/, use: 'ts-loader' }
    ]
  }
};
  • loader 三种使用方式
  • 配置 在 webpack.config.js 文件中指定 loader。
  • 内联 在每个 import 语句中显式指定 loader。
  • CLI 在 shell 命令中指定它们。

配置

module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  }

内联

  • 使用 ! 将资源中的 loader 分开。分开的每个部分都相对于当前目录解析
import Styles from 'style-loader!css-loader?modules!./styles.css';

CLI

webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'
  • loader特性
  • loader 支持链式传递。能够对资源使用流水线(pipeline)。一组链式的 loader 将按照相反的顺序执行。loader 链中的第一个 loader 返回值给下一个 loader。在最后一个 loader,返回 webpack 所预期的 JavaScript。
  • loader 可以是同步的,也可以是异步
  • loader 运行在 Node.js 中,并且能够执行任何可能的操作
  • loader 接收查询参数。用于对 loader 传递配置
  • loader 也能够使用 options 对象进行配置。
  • 除了使用 package.json 常见的 main 属性,还可以将普通的 npm 模块导出为 loader,做法是在 package.json 里定义一个 loader 字段。
  • 插件(plugin)可以为 loader 带来更多特性。
  • loader 能够产生额外的任意文件。

解析loader

  • loader 将从模块路径(通常将模块路径认为是 npm install, node_modules)解析插件(plugins)
  • loader 模块需要导出为一个函数,并且使用 Node.js 兼容的 JavaScript 编写

====
说是webpack能从入门到精通
webpack就是静态模块打包器
在这里插入图片描述
entry入口 output出口 loader非js的翻译官 pligins范围更广的任务 mode开发模式和生产模式

github
笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值