<转> webpack 简单介绍

2018-06-18  本文已影响0人  不知道的是

webpack 是一个现代的 JavaScript 应用程序的模块打包器 ( Module Bundler ) 。

入口 ( Entry )

webpack 将创建所有应用程序的依赖关系图表 ( dependency graph ) 。图表的起点被称之为入口起点 ( entry point ) 。入口起点告诉 webpack 从哪里开始,并遵循着依赖关系图表知道要打包什么。可以将您应用程序的入口起点认为是根上下文 ( contextual root ) 或 app 第一个启动文件。

webpack.config.js

const path = require('path')

module.exports = {
  entry: path.join(__dirname, './src/main.js')
}

出口 ( Output )

将所有的资源 ( assets ) 归拢在一起后,我们还需要告诉 webpack 在哪里打包我们的应用程序。webpack 的 output 属性描述了如何处理归拢在一起的代码 ( bundled code ) 。

webpack.config.js

const path = require('path')

module.exports = {
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'bundle.js'
  }
}

我们通过 output.filename 和 output.path 属性来描述 webpack bundle 的名称,以及我们想要生成 ( emit ) 在哪里。

加载器 ( Loader )

webpack 的目标是,让 webpack 聚焦于项目中的所有资源 ( asset ) ,而浏览器不需要关注考虑这些( 这并不意味着资源 ( asset ) 都必须打包在一起 )。webpack 把每个文件
(.css /.html /.scss /.jpg等) 都作为模块处理。而且 webpack 只理解 JavaScript 。

webpack loader 会将这些文件转换为模块,而转换后的文件会被添加到依赖图表中。

在更高层面,webpack 的配置有两个目标。

1、识别出应该被对应的 loader 进行转换的文件

2、由于进行过文件转换,所以能够将被转换的文件添加到依赖图表(通过 use 属性)中

webpack.config.js

module.exports = {
  module: {
    rules: [
      { test: /\.js$/, use: 'babel-loader' }
    ]
  }
}

以上配置中,我们对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:test 和 use 。这可以告诉 webpack compiler 如下:

“嘿,webpack compiler,当你碰到 ( require / import 语句中被解析为 '.js' 的路径 ) 时,在你把它们添加并打包之前,要先使用 babel-loader 去转换”。

插件 ( Plugins )

插件 ( plugins ) 最常用于( 但不限于 )在打包模块的 compilation 和 chunk 生命周期执行操作和自定义功能。

webpack.config.js

const path = require('path')
const htmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {

  // ... ...

  plugins: [
    new htmlWebpackPlugin({
      template: path.join(__dirname, './src/index.html')
    })
  ]
}

参考资料:
https://www.jianshu.com/p/36381d7ac6c0
http://webpack.github.io/

上一篇 下一篇

猜你喜欢

热点阅读