You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Webpack中访问bundle.js并在HTML中调用其代码?

让Webpack打包的自定义语法代码生效的步骤

问题分析

目前生成的nlweb.bundle.js存在几个关键问题:

  • testProcedure、generatorVar等变量仅为局部变量,未挂载到__webpack_exports__,导致全局的nlweblib是空对象
  • 编译后的代码依赖React.createElement,但Webpack未配置React相关依赖,浏览器会找不到React
  • 自定义语法中的start testprocedure =>();未被编译成实际执行的代码

1. 安装React依赖并调整Webpack配置

因为编译后的代码使用了React的API,首先安装依赖:

npm install react react-dom

修改Webpack配置的resolve项,让Webpack能识别React模块:

resolve: {
    extensions: ['.js', '.jsx'] // 添加.jsx扩展名支持
}

2. 修改自定义语法编译器,正确导出变量并执行启动逻辑

调整编译器的输出逻辑,将自定义语法中的变量、函数挂载到__webpack_exports__,同时执行start语句对应的代码:
编译后的代码应改为:

let generatorVar;
let generatorLiteral = 20;
function testProcedure(testParameter) {
      let testWaardeProcedure;
      return React.createElement("div", null, React.createElement("h1", null, "Helloworld"), React.createElement("p", null, "Hello"));
}
// 导出变量和函数到全局库对象
__webpack_exports__.generatorVar = generatorVar;
__webpack_exports__.generatorLiteral = generatorLiteral;
__webpack_exports__.testProcedure = testProcedure;
// 执行start对应的调用逻辑
testProcedure();

3. 在HTML中准备React挂载容器并渲染

修改HTML模板src/html/index.html,添加React元素的挂载容器,并完成渲染:

<!DOCTYPE html>
<html>
<head>
    <title>NLWeb Demo</title>
</head>
<body>
    <!-- React元素挂载容器 -->
    <div id="root"></div>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            // 调用库中的函数获取React元素,并用ReactDOM渲染
            const appElement = nlweblib.testProcedure();
            ReactDOM.render(appElement, document.getElementById('root'));
        });
    </script>
</body>
</html>

或者直接在编译器中生成渲染代码(无需HTML中的脚本),在testProcedure()后添加:

ReactDOM.render(testProcedure(), document.getElementById('root'));

4. 验证运行

启动Webpack开发服务器:

npm run serve

浏览器打开后,页面会显示Helloworld标题和Hello段落,说明代码已生效。


内容的提问来源于stack exchange,提问作者Toby x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:06:12