React Boilerplate 的 HMR 在编辑依赖库(节点模块)时非常慢
React Boilerplate's HMR very slow when editing dependency library (node module)
我正在使用 React Boilerplate,它在开发环境中利用 HMR(热模块重新加载)。
但是,我还有一个自定义组件库,我将其作为依赖项加载。它有大约 20 个左右的 React 组件。该库是一个 UMD 模块,我通过样板中的 package.json 作为依赖项加载它。它也是由 Webpack 构建的,构建它大约需要 2 秒。
虽然在本地处理这两个项目时,我在我的样板项目中链接了库(使用 'npm link'),所以我可以看到最近的更改。
现在,每当我对该依赖库中的任何地方进行更改时,HMR 都会启动样板项目,这太棒了。但即使是最简单的更改,如 CSS 颜色,HMR 也需要大约 20 秒 (!!!) 才能在样板项目中重建 webpack。
每次重建依赖项时都会发生这种情况,所以我进行微小更改的 20 秒是非常有害的。
谁能告诉我如何减少这段时间?我觉得我错过了什么。我是 运行 样板文件的默认 webpack 配置,因为它开箱即用。
依赖项的 webpack 配置与样板非常相似,但输出不同:
output: {
path: __dirname + '/dist',
filename: 'index.js',
library: 'my-component-library',
libraryTarget: 'umd',
umdNamedDefine: true,
},
babel 和样式加载器几乎相同。
感谢大家提出的任何建议。
为了回答我自己的问题,我这样做了:
https://github.com/uber/react-map-gl/issues/165#issuecomment-275412920
internals/webpack/webpack.base.babel.js
@@ @@
loaders: [{
test: /\.js$/, // Transform all .js files required somewhere with Babel
loader: 'babel-loader',
- exclude: /node_modules/,
+ include: [
+ path.resolve(process.cwd(), 'app'),
+ path.resolve(process.cwd(), 'node_modules/mapbox-gl/js'),
+ ],
query: options.babelQuery,
@@ @@
resolve: {
modules: ['app', 'node_modules'],
extensions: [
'.js',
'.jsx',
'.react.js',
],
mainFields: [
'browser',
'jsnext:main',
'main',
],
+ alias: {
+ 'mapbox-gl$': path.join(__dirname, '../../node_modules/mapbox-gl/dist/mapbox-gl.js'),
+ },
},
package.json
"env": {
"production": {
- "only": [
- "app"
- ],
"plugins": [
"transform-react-remove-prop-types",
"transform-react-constant-elements",
"transform-react-inline-elements"
]
},
我正在使用 React Boilerplate,它在开发环境中利用 HMR(热模块重新加载)。
但是,我还有一个自定义组件库,我将其作为依赖项加载。它有大约 20 个左右的 React 组件。该库是一个 UMD 模块,我通过样板中的 package.json 作为依赖项加载它。它也是由 Webpack 构建的,构建它大约需要 2 秒。
虽然在本地处理这两个项目时,我在我的样板项目中链接了库(使用 'npm link'),所以我可以看到最近的更改。
现在,每当我对该依赖库中的任何地方进行更改时,HMR 都会启动样板项目,这太棒了。但即使是最简单的更改,如 CSS 颜色,HMR 也需要大约 20 秒 (!!!) 才能在样板项目中重建 webpack。
每次重建依赖项时都会发生这种情况,所以我进行微小更改的 20 秒是非常有害的。
谁能告诉我如何减少这段时间?我觉得我错过了什么。我是 运行 样板文件的默认 webpack 配置,因为它开箱即用。
依赖项的 webpack 配置与样板非常相似,但输出不同:
output: {
path: __dirname + '/dist',
filename: 'index.js',
library: 'my-component-library',
libraryTarget: 'umd',
umdNamedDefine: true,
},
babel 和样式加载器几乎相同。
感谢大家提出的任何建议。
为了回答我自己的问题,我这样做了:
https://github.com/uber/react-map-gl/issues/165#issuecomment-275412920
internals/webpack/webpack.base.babel.js
@@ @@
loaders: [{
test: /\.js$/, // Transform all .js files required somewhere with Babel
loader: 'babel-loader',
- exclude: /node_modules/,
+ include: [
+ path.resolve(process.cwd(), 'app'),
+ path.resolve(process.cwd(), 'node_modules/mapbox-gl/js'),
+ ],
query: options.babelQuery,
@@ @@
resolve: {
modules: ['app', 'node_modules'],
extensions: [
'.js',
'.jsx',
'.react.js',
],
mainFields: [
'browser',
'jsnext:main',
'main',
],
+ alias: {
+ 'mapbox-gl$': path.join(__dirname, '../../node_modules/mapbox-gl/dist/mapbox-gl.js'),
+ },
},
package.json
"env": {
"production": {
- "only": [
- "app"
- ],
"plugins": [
"transform-react-remove-prop-types",
"transform-react-constant-elements",
"transform-react-inline-elements"
]
},