从 webpack 包中公开一个函数
Expose a function from a webpack bundle
我正在尝试向网页公开一个函数,该函数可以在外部调用,或者在 window.load 上,或者在任何时候调用。
DoThing.ts
import * as lib from "libs";
export default function DoAThingFunc():void{
console.log('Do a thing)'
}
这就是后来进口的东西
ExposeDoThing.js
import DoAThingFunc from './DoThing'
window.exposeFunc = DoAThing
window.exposeFunc():
webpack 4 包
entry: {
main: './src/MainEntry.tsx',
popupcallback: './src/ExposeDoThing.js'
},
output: {
path: path.join(__dirname, outputDir + "/js"),
filename: '[name].js',
publicPath: "/js/",
library:'pclGlobal'
},
MyPage.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pop up</title>
</head>
<body>
<script src="/js/vendor-main.js" type="text/javascript"></script>
<script src="/js/popupcallback.js" type="text/javascript"></script>
</body>
</html>
未调用任何内容,pclGlobal
未定义,即使:
var pclGlobal=(window.webpackJsonppclGlobal=window.webpackJsonppclGloba...
出现在输出中。并且没有从函数中调用任何东西。
我只想在脚本加载时触发函数 DoAThingFunc()
,我错过了什么?
我认为您需要将您的包公开为一个库。检查此 link 关于 webpack config 中的 output
部分,并检查正确的方法。
也许是这样的配置:(注意libraryExport
attr)
module.exports = {
entry: './index.js',
output: {
path: './lib',
filename: 'yourlib.js',
libraryTarget: 'umd',
library: 'YourLibraryName',
umdNamedDefine: true,
libraryExport: 'default'
}
};
我注意到我引用的 html 示例中的 vendor-main.js
,除了我们在 webback 条目中没有一个但是有文件输出...
看起来我们曾经有一个供应商捆绑包,然后停止但留下了以下 webpack.config.js
runtimeChunk: {
name: entrypoint => `vendor-${entrypoint.name}`
}
这有一个奇怪的效果。如果您的条目未调用 main
,则它不会执行任何 export default
函数。
我正在尝试向网页公开一个函数,该函数可以在外部调用,或者在 window.load 上,或者在任何时候调用。
DoThing.ts
import * as lib from "libs";
export default function DoAThingFunc():void{
console.log('Do a thing)'
}
这就是后来进口的东西 ExposeDoThing.js
import DoAThingFunc from './DoThing'
window.exposeFunc = DoAThing
window.exposeFunc():
webpack 4 包
entry: {
main: './src/MainEntry.tsx',
popupcallback: './src/ExposeDoThing.js'
},
output: {
path: path.join(__dirname, outputDir + "/js"),
filename: '[name].js',
publicPath: "/js/",
library:'pclGlobal'
},
MyPage.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pop up</title>
</head>
<body>
<script src="/js/vendor-main.js" type="text/javascript"></script>
<script src="/js/popupcallback.js" type="text/javascript"></script>
</body>
</html>
未调用任何内容,pclGlobal
未定义,即使:
var pclGlobal=(window.webpackJsonppclGlobal=window.webpackJsonppclGloba...
出现在输出中。并且没有从函数中调用任何东西。
我只想在脚本加载时触发函数 DoAThingFunc()
,我错过了什么?
我认为您需要将您的包公开为一个库。检查此 link 关于 webpack config 中的 output
部分,并检查正确的方法。
也许是这样的配置:(注意libraryExport
attr)
module.exports = {
entry: './index.js',
output: {
path: './lib',
filename: 'yourlib.js',
libraryTarget: 'umd',
library: 'YourLibraryName',
umdNamedDefine: true,
libraryExport: 'default'
}
};
我注意到我引用的 html 示例中的 vendor-main.js
,除了我们在 webback 条目中没有一个但是有文件输出...
看起来我们曾经有一个供应商捆绑包,然后停止但留下了以下 webpack.config.js
runtimeChunk: {
name: entrypoint => `vendor-${entrypoint.name}`
}
这有一个奇怪的效果。如果您的条目未调用 main
,则它不会执行任何 export default
函数。