如何在开发/调试期间自动更新Jupyter Notebook扩展?

时间:2019-04-02 12:22:52

标签: javascript jupyter-notebook jupyter-contrib-nbextensions

我尝试为Jupyter Notebook写一个自定义扩展,如下所述: https://towardsdatascience.com/how-to-write-a-jupyter-notebook-extension-a63f9578a38c

我使用Windows7上的Chrome开发者工具检查和编辑自定义扩展程序的Javascript源代码。我希望当按F5键更新页面时,我更改后的源代码将立即应用。

但是,正如上述文章所述,我必须运行

jupyter-contrib-nbextensions.exe install

并重新启动服务器以刷新笔记本扩展名,并查看我的代码更改的影响。

每次玩转和开发/调试扩展时,这样做都会很烦人。

=>是否有某种开发选项可以自动更新/重新加载扩展?

1 个答案:

答案 0 :(得分:0)

作为解决方法,我编写了一个扩展“工作区模块”:

https://github.com/stefaneidelloth/treezjs/tree/master/jupyter_notebook_extension/workspace_module

该扩展名的目的是如果笔记本文件夹中存在文件“ workspace.js”,则将其导入。我的扩展程序的 main.js 是:

    define([
    'require',
    'jquery',
    'base/js/namespace',
    'base/js/events',
    'notebook/js/codecell' 
], function(
    requirejs,
    $,
    Jupyter,
    events,
    codecell   
) {

    var load_ipython_extension = function() {  
        if (Jupyter.notebook !== undefined && Jupyter.notebook._fully_loaded) {
            init();                    
        } else {
            console.log("[workspace_module] Waiting for notebook availability")
            events.on("notebook_loaded.Notebook", function() {
                init();                           
            })
        }
    };

    function init(){

        console.log("[workspace_module] trying to load workspace.js")

        var moduleScript = document.createElement('script');
        moduleScript.setAttribute('type','module'); 

        moduleScript.setAttribute('src','workspace.js');    

        document.body.appendChild(moduleScript);
    }


    return {
        load_ipython_extension: load_ipython_extension       
    };

});

workspace.js 重定向到我的实际扩展名:

import './treezjs/src/treezJupyterNotebook.js';

这样,我可以在开发过程中修改代码,而无需重新执行install命令。