【发布时间】:2020-05-19 14:38:15
【问题描述】:
在处理一个项目时,我遇到了需要使用脚本标签加载作为 AMD 模块编写的第三方文件的情况:<script type="text/javascript" src="https://cdn.host.com/external.js"></script>。
该文件包含示例代码使用的多个模块,例如:
require(['src/module/MyObject'], (myObject) => {
// Use myObject
});
该示例包含 RequireJS 作为脚本标记以启用此语法。 现在...我的项目是一个带有 Webpack 的 React 应用程序,我想在其中访问组件中某处的“myObject”,但我似乎无法让它工作。
仅使用 require() 语法会失败,因为 Webpack 会尝试将代码添加到包中。我尝试了 'non_webpack_require' 替代方案,保留 RequireJS 脚本标记,但这似乎在代码的其他地方添加了各种冲突(到处都是未定义的东西)。我还尝试摆弄 webpack 'External' 属性,但似乎也无法使其按预期工作。后者似乎是要走的路,但我最终得到 'src/module/MyObject' is undefined 错误。
任何帮助表示赞赏。
编辑: 根据要求,我的 webpack.config 的相关部分:
{
entry: './src/index.tsx',
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: `js/[name].[contenthash].bundle.js`,
chunkFilename: 'js/[name].[contenthash].js',
},
resolve: {
// Add '.ts' and '.tsx' as resolvable extensions.
extensions: ['.ts', '.tsx', '.js', '.json'],
plugins: [
new TsconfigPathsPlugin(),
],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: {
loader: "babel-loader",
},
exclude: [/node_modules/],
},
],
},
}
【问题讨论】:
-
如果将库包含在 HTML 中,则与 Webpack 无关。如果
myObject是全局变量,请在加载应用后检查浏览器的开发控制台。 -
是的,所以我可以下载文件并将其包含在我的包中。但仍然不知道如何做到这一点。此外,似乎没有全局对象。而且......我不想在脚本标签中包含 RequireJS 库,因为它会破坏其他东西
-
如果使用 Webpack 在本地包含它,则不需要 RequireJS,因为 Webpack 应该支持它。你在用什么图书馆?我可以看看
-
你也可以发布你的Webpack配置的相关部分吗?
标签: javascript webpack module require amd