【问题标题】:How to specify resolvers dependencies in webpack?如何在 webpack 中指定解析器依赖项?
【发布时间】:2016-11-23 19:51:09
【问题描述】:

我正在尝试从 RequireJs 切换到 webpack 来处理 js 加载、sass 处理和其他类似的事情。

在 RequireJs 中可以为模块指定依赖项

// file.js
require(['moduleA','moduleB'],function(A,B) {
    ...
}

例如,我想指定 moduleA 需要 jquery

// requirejs.config.js
require.config({
    ...
    shim:{
        moduleA:{
            deps:['jquery']
        } 
    }
})

我正在尝试在 webpack 中找到一种方法来做同样的事情

// webpack.config.js
module.exports = {
    entry: toObject(glob.sync('src/**/*.js*')),
    output: {
        path: './bin',
        filename: '[name].js'
    },
    resolve: {
        alias: {
            'moduleA': '/path/to/moduleA',
            ...
        }
    }
};

function toObject(paths) {
    // I return an object of paths
}

但我找不到指定 moduleA 需要另一个模块的方法!

这里有人知道吗?

【问题讨论】:

    标签: javascript requirejs webpack


    【解决方案1】:

    你不需要。你只需require() 任何你需要的模块,它就会可用。

    您需要使用 RequireJS 执行此操作的原因是 RequireJS 是异步的,模块是异步加载的,因此它需要知道首先要加载什么。 Webpack(和一般的 CommonJS)是同步的。进入模块时,一切都已加载完毕。

    【讨论】:

    • 谢谢你的回答。如果我理解,这意味着如果我的模块A需要一个需要模块C的模块B,我只需要在模块B中需要模块C,在模块A中需要模块B?
    • 但是如果我需要('bootstrap/js/collapse');和折叠需要 Jquery,我无法编辑我的供应商文件来指定引导 js 需要 jquery,我得到“jsone.js:10515 Uncaught ReferenceError: jQuery is not defined(...)”
    • 我们在RequireJS 的配置中使用shim 用于第三方 脚本,该脚本应该由RequireJS 加载,但不在正式的模块系统下运行 i>,因此它不会调用require。一个很好的例子是 Bootstrap,它需要 jQuery:我们放置了一个声明对 jquery 的依赖关系的 shim,因此 RequireJS 在加载 Bootstrap 之前加载了 jQuery,一切都很好。所以当你说“只是require()”时,结果是“只需修改Bootstrap 以调用require()。我不了解你,但除非绝对没有其他解决方案,否则我会避免修改第三方库。
    • 如果要反驳的是可以编辑moduleA 以使其与webpack 一起使用,因为它不是第三方库,那么OP 不应该使用shim首先是因为将moduleA 编写为AMD 模块的正确方法是使用正确的define 调用,而不是为其编写shim 配置。
    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多