webpack 初探

草稿。。。

introduce

  • concepts webpack是现代js应用的模块打包器,它是非常可配置,但要明确以下四个概念。
1. Entry
webpack构建一个你应用程序依赖的图,起点便是所谓的erntry point。它告诉wenpack从哪开始并且
按照依赖图去知道什么要打包。可以将此比作 contextual root or the first file to kick off your app.。
The simplest example:
```
//webpack.config.js  
module.exports={
    entry:'./path/to/my/entry/file.js'
};
```
2. Output
一旦打包好了资源,依然需要告诉webpack哪里打包应用程序,output属性告诉webpack如何处理打包过的代码。
 The simplest example:
    ```
    //webpack.config.js  
    module.exports={
        entry:'./path/to/my/entry/file.js',
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'my-first-webpack.bundle.js'
          }
    };
    ```
 示例中用output.filename和output.path属性告诉webpack包名和将之emit to哪。
3. Loaders
目的在于将所有项目中的资源作为webpack而非浏览器关心的。webpack眼中一切(.css,.hmtl,.scss,.jpg,etc)
皆模块。但其只知道js,而Loaders在webpack中将这些文件转化成依赖图中的模块。有两个目的在高水准要求上:
a.确定什么文件该被相应loader转换(test),b:转换相应文件以加入到依赖图(use)。
```
const path = require('path');

const config = {
  entry: './path/to/my/entry/file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js'
  },
  module: {
    rules: [
      {test: /\.(js|jsx)$/, use: 'babel-loader'}
    ]
  }
};
module.exports = config;
```
4. Plugins
因loaders仅基于每个文件转换,故plugins是最常用的对打包模块的 "compilations" or "chunks"执行操作和自定义功能等。
要用plugin需要用require()且将其放入plugins数组。多数plugins可按需自定义
因可在配置中按不同目的多次使用,此时需要用new来构建它的一个实例。
```
const HtmlWebpackPlugin = require('html-webpack-plugin'); //installed via npm
const webpack = require('webpack'); //to access built-in plugins
const path = require('path');

const config = {
  entry: './path/to/my/entry/file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js'
  },
  module: {
    rules: [
      {test: /\.(js|jsx)$/, use: 'babel-loader'}
    ]
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin(),
    new HtmlWebpackPlugin({template: './src/index.html'})
  ]
};

module.exports = config;
```

Tags:

Categories:

Updated:

Leave a Comment

comments powered by Disqus