[英]Setting up webpack hot load / HMR for static pages
我知道標題沒有太大意義。 但是請忍受我。
我正在為使用舊的靜態ERB的舊版Rails應用設置React。 由於規模大,我必須緩慢地轉向SPA,這意味着要交換頁面上的組件。
我當前的設置是使用webpack編譯捆綁文件,然后將其輸出到資產目錄。 然后,僅依靠資產管道來將捆綁文件加載到頁面上進行緩存(不知道,但足以上手)。 在具有react組件的頁面上,我將有一個<div>
用於附加某個組件。 例如:
<body>
<div>some other erb, html stuffs</div>
<div>more other erb, html stuffs</div>
<div id='react-component-1'></div>
<div id='react-component-2'></div>
</body>
這是基本設置。 但是為了加快開發速度,我想設置熱加載。 但是,由於我沒有提供整個頁面,因此我必須將捆綁文件實際寫入磁盤,以便Rails可以將其拾取。 而且這也阻止了我使用webpack-dev-server。
有什么方法可以在此設置中設置HMR?
可能的選擇:
編輯
我遵循了@SamHH的答案,似乎無法加載捆綁文件(404)。 我的路徑配置有點古怪。
我的webpack輸出路徑為
'../../app/assets/webpack/admin'
publicPath到
/admin/
但是在proxy
選項中設置的匹配路徑不太起作用。 從“網絡”標簽中,看起來它是從/javascripts/...
加載的/javascripts/...
Webpack配置:
const config = {
entry: {
bundle: './apps/appsRegistration',
vendor: VENDOR_LIBS
},
output: {
filename: '[name].js',
path: pathLib.resolve(__dirname, '../../app/assets/webpack/admin'),
publicPath: '/admin/'
},
resolve: {
extensions: ['.js', '.jsx'],
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.EnvironmentPlugin({ NODE_ENV: 'development' }),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor'
}),
],
module: {
rules: [
{
test: /\.jsx?$/,
use: 'babel-loader',
exclude: /node_modules/,
},
],
},
externals: {
react: 'React',
'react-dom': 'ReactDOM',
redux: 'Redux',
'react-redux': 'ReactRedux',
'redux-thunk': 'ReduxThunk'
},
devServer: {
port: 9000,
disableHostCheck: true,
proxy: {
'!/admin/**': {
target: 'http://localhost:3000',
secure: false
}
},
hot: true
}
};
您可以使用webpack-dev-server
並將所有非資產代理回您的Rails應用程序。 因此,如果您的rails應用程序位於http://localhost:8000
,則告訴Webpack配置將與您的資產全局不匹配的所有devServer請求代理回該地址。 然后,您將在Webpack開發服務器端口上進行加載和開發。
例如,如果您將Webpack配置設置為output.publicPath: '/dev-assets/'
則可以執行以下操作:
devServer: {
port: 9000,
proxy: {
'!/dev-assets/**': {
target: `http://localhost:8000`,
secure: false
}
},
hot: true
},
}
然后在開發時加載http://localhost:9000
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.