Jac*_*lan 4 javascript jint webpack
我正在尝试编写一个同构模块。服务器 javascript 将在 JINT 内部运行。我专门创建了一个 webpack 包来构建模块的服务器版本。我想公开一个可以让 JINT 调用的函数。我正在使用 JINT 的 scriptEngine.Invoke 函数,但是这是在全局对象上寻找函数。我不知道如何将函数放到全局对象上。我曾尝试使用公开加载程序,但这似乎导出了整个模块,我无法让它只公开一个函数。
这是我的切入点:
require("expose?FormValidator!./formValidator.js");
Run Code Online (Sandbox Code Playgroud)
这是我的 formValidator.js:
export default function validate () {
return 'HelloWorld';
}
Run Code Online (Sandbox Code Playgroud)
当我加载结果包并检查 FormValidator 全局时,它是一个带有验证函数的对象。有没有办法让验证函数直接分配给 FormValidator?
我和你的情况一样。这是我的代码:
webpack.config.js:
module.exports = {
entry: './src/method/eTrack/index.js',
output: {
filename: 'eTrack.js',
path: path.resolve(__dirname, 'dist'),
library: 'eTrack',
libraryTarget: 'umd'
},
};
Run Code Online (Sandbox Code Playgroud)
./src/method/eTrack/index.js?
import create from './create';
import getAll from './getAll';
import getByName from './getByName';
import remove from './remove';
export function eTrack () {
}
eTrack.trackers = [];
eTrack.create = create;
eTrack.getAll = getAll;
eTrack.getByName = getByName;
eTrack.remove = remove;
Run Code Online (Sandbox Code Playgroud)
好吧,通过webpack捆绑后,我可以eTrack在window中访问,但结果是一个对象。这意味着我不能eTrack()直接调用,但应该调用like eTrack.eTrack()。
我已经尝试过@Ambroos 的解决方案,将./src/method/eTrack/index.js更改为?
module.exports = function eTrack () {
}
Run Code Online (Sandbox Code Playgroud)
这次捆绑后,我无法eTrack在浏览器窗口中访问,eTrack对象消失了,并eTrack is undefined在控制台中引发错误。
然后我找到了一篇很有帮助的文章:http : //siawyoung.com/coding/javascript/exporting-es6-modules-as-single-scripts-with-webpack.html
并将我的更改index.js为:
function eTrack () {
}
module.exports = eTrack;
Run Code Online (Sandbox Code Playgroud)
然后一切都按预期工作!我可以eTrack()直接在<script>标签中调用。虽然我不知道@Ambroos 的答案和这个解决方案之间的区别。
| 归档时间: |
|
| 查看次数: |
18762 次 |
| 最近记录: |