简体   繁体   English

带函数的 module.exports

[英]module.exports with function

I have several JavaScript files that I create enums.我有几个创建枚举的 JavaScript 文件。 for example:例如:

source.enum.js源.enum.js

const enumUtils = require('../enum.utils');

const EmailAddressesSourceType = enumUtils.createEnum([
    ['DIRECTORY', 'directory'],
    ['FILE', 'file'],
    ['ARRAY', 'array']
]);

module.exports = { EmailAddressesSourceType };

The enum.utils.js is just a file that do the simple function of creating an enum from array: enum.utils.js只是一个文件,它执行从数组创建枚举的简单功能:

class EnumUtils {

    constructor() { }

    // This method takes a map of elements and converts them to freeze objects (an enum-like object).
    createEnum(mapItems) {
        if (!mapItems || mapItems.length <= 0) {
            throw new Error(`No array received: ${mapItems} (1000000)`);
        }
        const mapList = new Map([...mapItems]);
        const symbolMap = {};
        mapList.forEach((value, key) => { symbolMap[key] = value; });
        return Object.freeze(symbolMap);
    }
}

const enumUtils = new EnumUtils();
module.exports = enumUtils;

Now since I have 5-6 js files with enums, I want to avoid 'const enumUtils = require('../enum.utils');'现在因为我有 5-6 个带有枚举的 js 文件,我想避免 'const enumUtils = require('../enum.utils');' in each of them, and do it all together in index.js file, something like this:在它们中的每一个中,并在index.js文件中一起完成,如下所示:

const { EmailAddressStatus, EmailAddressType, SendEmailStepName } = require('./files/emailAddress.enum');
const { Placeholder } = require('./files/placeholder.enum');
const { EmailAddressesSourceType } = require('./files/sources.enum');
const { Mode, Status, Method } = require('./files/system.enum');
const { StatusIcon, Color, ColorCode } = require('./files/text.enum');

const createEnum = (mapItems) => {
    if (!mapItems || mapItems.length <= 0) {
        throw new Error(`No array received: ${mapItems} (1000000)`);
    }
    const mapList = new Map([...mapItems]);
    const symbolMap = {};
    mapList.forEach((value, key) => { symbolMap[key] = value; });
    return Object.freeze(symbolMap);
};

module.exports = {
    createEnum(Color), createEnum(ColorCode), createEnum(EmailAddressStatus), createEnum(EmailAddressType), createEnum(EmailAddressesSourceType),
    createEnum(Method), createEnum(Mode), createEnum(Placeholder), createEnum(SendEmailStepName), createEnum(Status), createEnum(StatusIcon)
};

But, there are compilation error in:但是,有编译错误:

module.exports = {
createEnum(Color), createEnum(ColorCode), createEnum(EmailAddressStatus), createEnum(EmailAddressType), createEnum(EmailAddressesSourceType),
createEnum(Method), createEnum(Mode), createEnum(Placeholder), createEnum(SendEmailStepName), createEnum(Status), createEnum(StatusIcon)
};

My question is, there is a workaround so enable me to reduce the 'const enumUtils = require('../enum.utils');'我的问题是,有一个解决方法,使我能够减少 'const enumUtils = require('../enum.utils');' in each file of the enums js file?在枚举js文件的每个文件中?

Thanks!谢谢!

UPDATE 1更新 1

The error I'm getting is this:我得到的错误是这样的:

在此处输入图片说明

The current status of the file (before I was trying to refactor) - It works OK:文件的当前状态(在我尝试重构之前) - 工作正常:

index.js索引.js

const { EmailAddressStatus, EmailAddressType, SendEmailStepName } = require('./files/emailAddress.enum');
const { Placeholder } = require('./files/placeholder.enum');
const { EmailAddressesSourceType } = require('./files/sources.enum');
const { Mode, Status, Method } = require('./files/system.enum');
const { StatusIcon, Color, ColorCode } = require('./files/text.enum');

module.exports = {
    Color, ColorCode, EmailAddressStatus, EmailAddressType, EmailAddressesSourceType,
    Method, Mode, Placeholder, SendEmailStepName, Status, StatusIcon
};

This guy, guy-incognito , solved for me the issue.这个家伙,隐身人,为我解决了这个问题。 Now it works like a charm.现在它就像一个魅力。 Thanks man!谢啦!

const { EmailAddressStatus, EmailAddressType, SendEmailStepName } = require('./files/emailAddress.enum');
const { Placeholder } = require('./files/placeholder.enum');
const { EmailAddressesSourceType } = require('./files/sources.enum');
const { Mode, Status, Method } = require('./files/system.enum');
const { StatusIcon, Color, ColorCode } = require('./files/text.enum');

const createEnum = (mapItems) => {
    if (!mapItems || mapItems.length <= 0) {
        throw new Error(`No array received: ${mapItems} (1000000)`);
    }
    const mapList = new Map([...mapItems]);
    const symbolMap = {};
    mapList.forEach((value, key) => { symbolMap[key] = value; });
    return Object.freeze(symbolMap);
};

module.exports = {
    Color: createEnum(Color),
    ColorCode: createEnum(ColorCode),
    EmailAddressStatus: createEnum(EmailAddressStatus),
    EmailAddressType: createEnum(EmailAddressType),
    EmailAddressesSourceType: createEnum(EmailAddressesSourceType),
    Method: createEnum(Method),
    Mode: createEnum(Mode),
    Placeholder: createEnum(Placeholder),
    SendEmailStepName: createEnum(SendEmailStepName),
    Status: createEnum(Status),
    StatusIcon: createEnum(StatusIcon)
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM