如何为Jupyter Notebook扩展加载ES6模块?

时间:2019-04-04 14:36:54

标签: javascript jupyter es6-modules jupyter-contrib-nbextensions

我目前使用Jupyter Notebook Server 5.7.0版。我想编写一个Jupyter笔记本扩展程序,通过在文档中添加脚本标签来加载一些ES6模块,例如:

<script type="module" scr='./es6module.js'>

已添加脚本标签,但是我没有设法正确设置scr路径/为我的文件提供了正确的mime类型。

上面的脚本标签在笔记本目录中查找es6module.js文件。

我还尝试引用扩展文件夹中的文件:

<script type="module" scr='/nbextensions/my_extension_folder/es6module.js'>

两种情况下我都得到

Failed to load module script: The server responded with a non-JavaScript MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.

=>是否存在一些http路径,在该路径中文件以必需的mime类型提供以允许ES6模块使用?也许像

<script type="module" scr='/http/nbextensions/my_extension_folder/es6module.js'>

=>还是应该尝试使用Python启动自己的http服务器?

Jupyter.notebook.kernel.execute('http.server');

扩展代码示例:

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

    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','/nbextensions/my_extension_folder/es6module.js');  

        document.head.appendChild(moduleScript);
    }


    return {
        load_ipython_extension: load_ipython_extension       
    };

});

修改

可能与

有关

https://github.com/jupyter/notebook/pull/4468

1 个答案:

答案 0 :(得分:0)

我在Jupyter Notebook版本5.7.8中进行了尝试,现在可以加载ES6模块。