基础配置

基础配置

const config = {
  // 定义入口
  entry: {
    app: path.join(__dirname, "app")
  },
  // 定义包体文件
  output: {
    // 输出目录
    path: path.join(__dirname, "build"),

    // 输出文件名
    filename: "[name].js"
    // 使用 hash 作为文件名
    // filename: "[name].[chunkhash].js",
  },
  // 定义如何处理
  module: {
    rules: [
      {
        test: /\.js$/,
        use: "babel-loader",
        exclude: /node_modules/
      }
    ]
  },
  // 添加额外插件操作
  plugins: [new webpack.DefinePlugin()]
};

Webpack同样支持添加多个配置:

module.exports = [{
  entry: './app.js',
  output: ...,
  ...
}, {
  entry: './app.js',
  output: ...,
  ...
}]

我们代码中的requireimport解析规范,则由resolve模块负责,其包含了扩展、别名、模块等部分:

const config = {
  resolve: {
    alias: {
      /*...*/
    },
    extensions: [
      /*...*/
    ],
    modules: [
      /*...*/
    ]
  }
};

资源加载

const config = {
  module: {
    rules: [
      {
        // **Conditions**
        test: /\.js$/, // Match files
        enforce: "pre", // "post" too

        // **Restrictions**
        include: path.join(__dirname, "app"),
        exclude: path => path.match(/node_modules/),

        // **Actions**
        use: "babel-loader"
      }
    ]
  }
};
// Process foo.png through url-loader and other matches
import "url-loader!./foo.png";

// Override possible higher level match completely
import "!!url-loader!./bar.png";

babel-loader或者awesome-typescript-loader来处理JavaScript或者TypeScript文件

/******/ (function(modules) { // webpackBootstrap
...
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ((text = "Hello world") => {
  const element = document.createElement("div");

  element.innerHTML = text;

  return element;
});

/***/ })
/******/ ]);

use: ["style-loader", "css-loader"] css-loader会自动地解析@importurl(),而style-loader则会将CSS注入到DOM中,并且实现HMR的特性,而对于SASSLESSCSS预处理器,也有专门的sass-loader或者less-loader来处理;在生产环境下,我们也常常会将CSS抽取到独立的样式文件中,此时就可以使用mini-css-extract-plugin (MCEP)等工具。同样,我们可以使用url-loader/file-loader来处理图片等资源文件,

上一页
下一页