首页 > 解决方案 > 有没有办法从节点模块动态导入

问题描述

我想知道有没有办法从节点模块导入动态?例如导入(ace-builds/src-noconflict/mode-${file}用于 Ace 编辑器

标签: importnode-modulesace-editordynamic-import

解决方案


使用 webpack 有两种可能性。首先是import()通过覆盖使用ace.config.loadModule

import ace from "ace-builds"
ace.config.setDefaultValue("session", "useWorker", false)
ace.config.loadModule = function(moduleName, onLoad) {
    var module, moduleType;
    if (Array.isArray(moduleName)) {
        moduleType = moduleName[0];
        moduleName = moduleName[1];
    }
    var done = m=>{
        console.log(moduleName, "loaded")
        onLoad && onLoad(m)
    };
    console.log(moduleName)
    var parts = moduleName.split("/");
    if (parts[1] == "ext") {
        import(`ace-builds/src-noconflict/ext-${parts[2]}`).then(done);
    } else if (parts[1] == "theme") {
        import(`ace-builds/src-noconflict/theme-${parts[2]}`).then(done);
    } else if (parts[1] == "mode") {
        import(`ace-builds/src-noconflict/mode-${parts[2]}`).then(done);
    } else if (parts[1] == "keyboard") {
        import(`ace-builds/src-noconflict/keybinding-${parts[2]}`).then(done);
    } else if (parts[1] == "snippets") {
        import(`ace-builds/src-noconflict/snippets/${parts[2]}`).then(done);
    } else {
        console.error(moduleName, "not implemented")
    }
}

第二种是通过添加使用文件加载器

import "ace-builds"
import "ace-builds/webpack-resolver"

当添加到https://github.com/saba-bg/Ace-editor-dynamic-mode-import/blob/016928b521ebc5fd5b39c52352dafddd99d9df6b/src/editor/Ace.js#L7而不是 language.map 部分时,两者都适用于您的示例


推荐阅读