【问题标题】:Is there a way to optionally add function in bundle?有没有办法在捆绑包中选择添加功能?
【发布时间】:2020-10-09 09:15:38
【问题描述】:

美好的一天,我的任务是为 CMS 创建两个不同的包,一个为产品团队创建另一个包,我想在 CMS 包中但不想在产品团队中的功能很少。

我有一个 XYZ 类

Class XYZ {

constructor() {}

forCms() {}

forProduct() {}

}

我想要两个不同的捆绑包:

对于 CMS(我需要 forCms 功能):

Class XYZ {

constructor() {}

forCms() {} //<--- notice methods

}

对于产品(我需要产品功能):

Class XYZ {

constructor() {}

forProduct() {} //<--- notice methods

}

我搜索了很多,我找到了 Env。变量,我将它们用于一些逻辑,例如:

function abc() {
        const env = process.env.NODE_ENV;
        switch (env) {
            case "cms":
                //some logic
                break;
            default:
               //some logic
                 });
        }
}

我不知道,我怎样才能做到这一点?或者除了ENV之外还有什么不同的方式。在 Webpack 或 Rollup 等捆绑器中完成此任务?

任何建议都会有所帮助!

【问题讨论】:

    标签: javascript webpack module bundler rollup


    【解决方案1】:

    如果您正在寻找如何根据环境变量将方法附加到原型,您可以执行以下操作:

    export interface LayerManager {
        forCms: Function;
        forProduct: Function;
    }
    
    export class LayerManager {
        firstName: string = '';
        constructor(name: string) {}
    }
    
    // @ts-ignore
    if (process.env.NODE_ENV === "cms") {
        LayerManager.prototype.forCms = function() {}
    } else {
        LayerManager.prototype.forProduct = function() {}
    }
    

    Playground

    【讨论】:

    • 感谢您的回复,这对我有用。只有一个问题是它是使用 ENV 实现这一目标的唯一方法还是可以有另一种方法?
    • 你的意思不是修改原型或没有环境变量?如果不知道要求以及为什么需要这样做,就很难提出建议..
    • 这是我们目前正在进行的项目的要求,我们不想为此处理两个不同的存储库或分支。使用原型和环境解决这个问题是一种方法。我只是想知道是否有任何其他方式来处理这个用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多