javascript - 将组件直接渲染到模板中

标签 javascript reactjs webpack webpack-dev-server

我有一个 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 变量进行条件渲染。

最佳答案

查看HtmlWebpackIncludeAssetsPlugin ,它允许您向 html 文件添加 Assets ,我的想法是添加一个 js 文件,该文件将调用其中的 ReactDom.render 方法。

new HtmlWebpackPlugin(),
new HtmlWebpackIncludeAssetsPlugin({
  assets: [
    { path: 'path/to/bootstrap.js', type: 'js' }
  ]
})

关于javascript - 将组件直接渲染到模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52045115/

相关文章:

javascript - 如何从跨域 iframe 捕获(初始化)错误?

javascript - 使用 React 和 setTimeout 更新 <canvas/>

javascript - Material ui - 无法设置从选择验证器打开的弹出菜单的高度

javascript - 如何使用 webpack 跳过 css 文件中的所有依赖项

javascript - 是否有一套完整的 JavaScript (ECMAScript) 解析器测试用例可用?

javascript - rails 5.2+ : why still use assets pipeline with webpacker?

javascript - webpack require (jquery) 不起作用

vue.js - 测试 Vue 组件 : Failed to mount component: template or render function not defined

javascript - 如何拼接ko.compateds

android - 如何在 React Native 应用程序中维护 session ?