【问题标题】:Webpack: default file other than index.jsWebpack:index.js 以外的默认文件
【发布时间】:2016-11-24 09:15:08
【问题描述】:

在当前的 webpack 项目中,我的代码被划分为模块,每个模块都有一个以 .module.js 结尾的主入口点。例如。对于模块Util,入口点是util.module.js,我通过写import util from 'modules/util/util.module.js'将它包含在其他模块中

但是,由于所有模块的入口点语法相同,我宁愿避免指定入口的完整文件名。例如,如果我能写import util from 'modules/util'就好了。

我知道如果 util.module.js 是名称 index.js 这可以工作,但是我如何告诉 Webpack 以同样的方式获取我当前的模块条目?

【问题讨论】:

    标签: javascript webpack ecmascript-6 es6-module-loader es6-modules


    【解决方案1】:

    我将尝试概述一些现成的方法,从您的要求开始,然后朝着更传统的方向发展。

    我感觉到构建工具的一些过度设计可能正在蔓延,因此我强烈建议您重新考虑所有这些是否真的有必要并重新考虑传统方法。

    这类似于其他人期望模块被解析的方式,不需要 Webpack 并且不会破坏其他内部尝试根据此策略解析模块的工具,例如 eslint-plugin-import

    NormalModuleReplacementPlugin

    由于您需要在尝试解析的模块中包含目录名称,您可以使用NormalModuleReplacementPlugin 动态构建解析路径:

    new webpack.NormalModuleReplacementPlugin(/modules\/(\w+)$/, (result) => {
        result.request += `/${result.request.split('/').pop()}.module.js`
    }
    

    您需要尝试一下以确保涵盖所有有效名称。

    resolve.extensions

    如果你真的想以某种方式区分这些模块,那么你可以通过为它们提供特定的扩展来做到这一点:

    • modules/util/index.module.js
    • modules/dashboard/index.module.js

    配置就足够了:

    {
        resolve: {
            extensions: ['.js', '.module.js']
        }
    }
    

    主包

    另一种方法是将所有模块提取为包,在package.json 中指定{main}

    这将使您走上monorepository 的道路。

    常规

    传统的方法是将模块命名为index.js

    • modules/util/index.js
    • modules/dashboard/index.js

    【讨论】:

    • 这是一个非常完整的答案!我承认,我已经搜索了 2 天来寻找所描述的初始方法。我的模块文件被命名为modules/[moduleName]/[moduleName].module.js,所以我想我必须做一些模式匹配才能正确解析。经过一番思考,将文件重命名为 index.module.js 并将 .module.js 添加到 extensions 数组可能是代码可搜索性和约定之间的完美结合。谢谢!
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多