将组件直接渲染到模板中

问题描述 投票:0回答:1

我有一个React组件,我正在使用Webpack构建。该组件从index.js导出,这是模块中的entry文件:

// packages/tnetennba/index.js

class Tnetennba extends React.Component {
  render() {
    return (
      <div>good morning, that's a nice tnetennba</div>
    )
  }
}

export default Tnetennba

我的webpack配置位于与模块不同的目录中(我使用的是mono-repository),因此模块本身没有任何构建配置文件或模板可以与webpack-dev-server一起使用。

// packages/tnetennba/package.json
{
  "name": "tnetennba",
  "version": "0.0.1",
  "main": "dist/index.js",
  "scripts": {
    "start": "webpack-dev-server --config ../config/webpack.dev.js --open",
    "build": "webpack --config ../config/webpack.build.js"
  }
}

但是,我不能在开发模式下使用组件,我可以使用HtmlWebpackPlugin实现:

// packages/config/webpack.dev.js
module.exports = merge(common, {
  mode: 'development',
  ...
  plugins: [
    new HtmlWebpackPlugin({
      inject: true,
      template: '../config/index.html' // <-- this path is relative, becuase webpack will be called from packages/tnetennba directory.
    })
  ]
})

但是,我必须将ReactDOM.render函数调用放在我的模块的index.js中,以将组件渲染到模板中:

//...
export default Tnetennba

ReactDOM.render(<Tnetennba />, document.getElementById('root')) // <-- This shouldn't be here.

问题:有没有办法,我可以避免在开发模式下工作时调用模块中的render?可以在webpack中调用React渲染器吗?

我想避免使用节点的process变量进行条件渲染。

javascript reactjs webpack webpack-dev-server
1个回答
2
投票

看看HtmlWebpackIncludeAssetsPlugin,它允许你将资源添加到html文件中,我的想法是添加一个js文件,在其中调用ReactDom.render方法。

new HtmlWebpackPlugin(),
new HtmlWebpackIncludeAssetsPlugin({
  assets: [
    { path: 'path/to/bootstrap.js', type: 'js' }
  ]
})
© www.soinside.com 2019 - 2024. All rights reserved.