我已经与这个问题作斗争了好几天了,这似乎可行;买家要小心,这是一个最小的工作解决方案,它既不漂亮也不优化 - 一个更好的解决方案将非常受欢迎!
首先,在 中.ipython/<profile>/static/custom/myScript.js
,我们做了一些 require.js 的魔法:
define(function(){
var foo = function(){
console.log('bar');
}
return {
foo : foo
}
});
复制此模式以获得尽可能多的功能。然后,在 中.ipython/<profile>/static/custom/custom.js
,将它们拖到持久的东西中:
$([IPython.events]).on('notebook_loaded.Notebook', function(){
require(['custom/myScript'], function(custom){
window.foo = custom.foo;
} );
});
是的,我是一个可怕的人,会在窗口对象上扔东西,你认为合适的命名空间。但现在在笔记本中,一个单元格就像
%%javascript
foo();
应该做它看起来应该做的事情,而不需要用户显式地导入你的 JS。我很想看到一个更简单的解决方案(请开发人员我们$.getScript('/static/custom/util.js');
可以custom.js
加载一堆全局 JS 函数) - 但这是我目前最好的。除了唱歌和跳舞之外,IPython notebook 团队的巨大进步,这是一个很棒的平台!