【问题标题】:is there any way for dynamic import from node modules有没有办法从节点模块动态导入
【发布时间】:2021-10-03 01:56:30
【问题描述】:

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

【问题讨论】:

  • 你使用 webpack 还是其他打包工具?
  • 我用ace editor webpack
  • 使用 webpack 动态导入应该可以开箱即用。如果你给我看代码不工作的例子,我可以帮助找到错误
  • 我不知道它有一个 webpack,我怎么能告诉你我的确切问题?
  • 分享你的代码,或者在github上重现问题的例子

标签: import node-modules ace-editor dynamic-import


【解决方案1】:

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

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")
    }
}

第二种是通过添加使用file-loader

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 时,两者都适用于您的示例,而不是语言.map 部分

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2019-09-03
    • 2013-09-27
    • 1970-01-01
    • 2019-03-27
    • 2017-06-12
    相关资源
    最近更新 更多