reactjs - 代码拆分时未定义Requirejs回调
问题描述
我是RequireJS的新手我有一个 ReactJS 应用程序index.jsx
作为入口点
// index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
export function callBackForRequirejs() {
return "testing";
}
当我通过 RequireJS 加载我的构建时,我得到了这些回调
require(["/path/to/bundle"], function(callback) {
console.log(callback) // I get "callBackForRequirejs"
}, function(err){
console.log(err)
});
但是当我进行代码拆分时,我在回调中变得未定义,对于代码拆分,我正在使用这些配置
optimization: {
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: "vendor",
chunks: "initial",
}
}
}
}
更新:
实际上,我的反应应用程序是一些外部应用程序的插件,外部应用程序通过 RequireJS 加载我的插件。外部应用程序内的代码是这样的
情况1:
require(['/pathof/my/react/plugin/bundle.js'],
function(callbackwhenpluginloads){
callbackwhenpluginloads()
})
由于我的 bundle.js 的大小非常大,所以我决定将它分成两部分,一个来自node_modules
,一个来自my code
现在外部插件加载我的反应插件是这样的
案例2:
require(['/pathof/my/react/plugin/bundle.js',
'/pathof/my/react/plugin/vendor.js' ], function(callbackwhenpluginloads){
callbackwhenpluginloads() // callbackwhenpluginloads is undefined
})
undefined
当外部应用程序加载我的插件时,我收到回调
解决方案
实际上,基于 RequireJS docs for start,您执行了以下方式并且效果很好:
require(['/path/to/bundle.js'], function(callback) {
console.log(callback) // you get callbackForRequireJS
}, function(error) {
console.log(error)
});
现在您对项目进行了代码拆分,因此您应该认为这vendor.js
就像拆分bundle.js
文件的依赖项。所以你应该按照这个例子首先加载依赖项,然后运行其他拆分代码。所以你的代码如下所示:
requirejs.config({
paths: {
reactApp: 'path/to/bundle.js'
},
deps: ['path/to/vendor.js'],
});
require(['reactApp'], function(callback) {
console.log(callback) // it should works now
}, function(error) {
console.log(error)
});
或者还有另一种我不推荐的方式:
require(['path/to/vendor.js'], function() {
require(['path/to/bundle.js'], function(callback) {
console.log(callback) // it should works now
}, function(bundleError) {
console.log('bundleError', bundleError)
});
}, function(vendorError) {
console.log('vendorError', vendorError)
});
推荐阅读
- javascript - 无法使用 D3 强制布局显示文本标签
- javascript - 限制表选择不起作用 - 材质 UI 表 - 反应
- ruby-on-rails - 在 High Sierra 上安装 Mysql 5.7
- node.js - 用于链接多个 http.requests 的 ASYNC/AWAIT
- json - 如何将 JSON 文档导入 Cloudant NoSQL DB
- c# - 为什么 Visual Studio IIS Express 尝试使用 ASPNetCore 模块运行 asp.net 完整框架应用程序?
- angular - 其他变量变化上的变量变化
- python - TensorFlow 中堆叠 LSTM 网络的维度
- html - 在 css 背景图像封面中模糊部分背景
- javascript - Set has 方法不会为现有对象返回 true