Webpack мульти файлы с зависимостями - PullRequest
0 голосов
/ 19 марта 2019

Я использую Webpack для создания библиотеки, которая будет использоваться во всех моих проектах (как клиентских, так и серверных).

Это мой webpack.config.js :

const path = require('path');

const libraryName = 'shared';

const config = {
    mode: 'development',
    entry: {
        utils: `${__dirname}/src/shared/utils.js`,
        enums: `${__dirname}/src/shared/enums.js`
    },
    devtool: 'inline-source-map',
    output: {
        path: `${__dirname}/dist`, 
        filename: '[name].js', 
        library: libraryName, 
        libraryTarget: 'umd',
        umdNamedDefine: true, 
        globalObject: 'typeof self !== "undefined" ? self : this' 
    },

    externals: {
        moment: {
            commonjs: 'moment',
            commonjs2: 'moment',
            amd: 'moment',
            root: 'moment'
        }
    },

    module: {
        rules: [{
            test: /(\.jsx|\.js)$/, 
            loader: 'babel-loader', 
            exclude: /(node_modules|bower_components)/ 
        }]
    },

    resolve: {
        modules: [path.resolve('./node_modules'), path.resolve('./src')], 
        extensions: ['.json', '.js']
    }
};

module.exports = config;

Это мой enums.js:

import { EnvironmentMode} from './enums/config.enum';
export { EnvironmentMode };

Это мой config.enum.js

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

// This enum define the possible environment mode of the application.
const EnvironmentMode = enumUtils.createEnum(new Map([
    ['DEVELOPMENT', 'development'],
    ['TEST_LOCAL', 'test_local'],
    ['TEST_LOCAL_DEMO', 'test_local_demo'],
    ['TEST_DEMO', 'test_demo'],
    ['TEST_LINUX', 'test_linux'],
    ['PRODUCTION', 'production']
]));


module.exports = {
    EnvironmentMode: EnvironmentMode
};

Этомой utils.js:

import enumUtils from './utils/enum.utils';

export {
    enumUtils
};

Это мой enum.utils.js

class EnumUtils {

    constructor() {}

    // This method takes a map of elements and convert them to freeze objects (enum-like object).
    createEnum(mapItems) {

        // Check the existence of the mapItems parameter. If not exists, return null instance.
        if (!mapItems || mapItems.length <= 0) {
            return null;
        }

        // This new object will hold the freeze array object.
        const symbolMap = {};

        // Assign each object.
        mapItems.forEach((value, key) => {
            symbolMap[key] = value;
        });

        // Freeze the object and return it.
        return Object.freeze(symbolMap);
    }
}

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

По какой-то причине, когда япостроить проект и внедрить скомпилированный код в проекты, запустить любой проект, я получаю следующую ошибку:

   C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:212
var EnvironmentMode = enumUtils.createEnum(new Map([['DEVELOPMENT', 'development'], ['TEST_LOCAL', 'test_local'], ['TEST_LOCAL_DEMO', 'test_local_demo'], ['TEST_DEMO', 'test_demo'], ['TEST_LINUX', 'test_linux'], ['PRODUCTION', 'production']])); // This enum define the possible error code types that can appear when the server is listening and running.
                                ^

TypeError: Cannot read property 'createEnum' of undefined
    at Object../src/shared/enums/config.enum.js (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:212:33)
    at __webpack_require__ (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:30:30)
    at Object../src/shared/enums.js (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:191:15)
    at __webpack_require__ (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:30:30)
    at ./src/shared/enums.js.Object.defineProperty.value (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:94:18)
    at C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:97:10
    at webpackUniversalModuleDefinition (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:3:20)
    at Object.<anonymous> (C:\Or\Web\OSRStreamer\Streamer\streamer\src\shared\enums.js:10:3)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)

Что я делаю не так?

1 Ответ

0 голосов
/ 19 марта 2019

Мой плохой.Я сделал

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

Вместо

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

Исправлено.Это работает.

...