webpack配置中“recordsPath”的目的是什么?

时间:2016-08-12 23:00:11

标签: webpack

我已经阅读了很多次文档,但我仍然感到困惑的是,我希望(或不想要)在webpack配置中使用recordsPath条目。有人可以用更多的外行来解释吗?

对于webpack 1.x与2.x的上述不同,答案也是如此?

1 个答案:

答案 0 :(得分:3)

来自文档:

  

从/向json文件存储/加载编译器状态。这将导致   模块和块的持久ID。

     

预计会有绝对路径。 recordsPath用于recordsInputPath   和recordsOutputPath,如果它们未定义。

     

在多个之间使用热码替换时,这是必需的   调用编译器。

https://webpack.github.io/docs/configuration.html#recordspath-recordsinputpath-recordsoutputpath

举一个例子,假设一个具有以下结构的简单应用程序:

./src
├── index.js
└── test.js

./src/index.js的位置:

require('./test.js');

./src/test.js只是一个空文件。

使用 API编译文件,例如

const webpack = require('webpack');

const webpackConfig = {
  entry: {
    'app': [
      path.resolve(__dirname, './src')
    ]
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: '[name].js'
  },
  recordsPath: path.resolve(__dirname, './recordsPath.json')
};

const compiler = webpack(webpackConfig, () => {});

它会生成./recordsPath.json

{
  "modules": {
    "byIdentifier": {
      "src/index.js": 0,
      "src/test.js": 1
    },
    "usedIds": {
      "0": 0,
      "1": 1
    }
  },
  "chunks": {
    "byName": {
      "app": 0
    },
    "byBlocks": {},
    "usedIds": {
      "0": 0
    }
  }
}

要了解模块ID的用例,您需要熟悉捆绑脚本的方式。在上述申请的情况下,输出将等同于:

(function(modules) {
  // Module resolution logic.
  // Excluded for brevity.
})
([
  function(module, exports, __webpack_require__) {
    // ./index.js
    __webpack_require__(1);
  },
  function(module, exports) {
    // ./test.js
  }
]);

正如您所看到的,在内部,webpack使用ID来引用模块。 recordsPath公开了这些ID。