Webpack normalModuleReplacmentPlugin не работает правильно в Windows - PullRequest
1 голос
/ 11 апреля 2019

Я начал писать библиотеку, чтобы получать некоторые данные из API в машинописном шрифте и использовать webpack в качестве упаковщика.У нас есть dev, test и prod api, поэтому библиотека должна использовать разные URL для каждой среды.В Webpack есть обычная встроенная опция MoleReplacmentPlugin, которая заменяет файлы в зависимости от конфигурации.Я создал различные файлы окружения, которые должны быть заменены веб-пакетом.

Я использую Ubuntu 18.04, но один из наших разработчиков, который сейчас работает над lib, в настоящее время использует windows.Он заметил, что замена не работает на его локальной машине.

webpack.config.js (пример из моего репозитория github)

const merge = require( 'webpack-merge' );
const path = require( 'path' );

const commonConfigObj = {
    entry: {
        'fooBar': './src/index.ts'
    },
    output: {
        filename: '[name].js',
        path: path.resolve( __dirname, 'dist' ),
        library: 'FooBar',
        libraryTarget: 'umd'
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: [
                    {
                        loader: 'ts-loader',
                        options: { configFile: 'tsconfig.json' }
                    }
                ]
            }
        ]
    },
    resolve: {
        extensions: [ '.ts', '.tsx', '.js' ]
    },
    profile: true
};

const commonConfig = merge( [ commonConfigObj ] );
const environments = {
    'prod': require( './webpack/prod.config.js' ),
    'dev': require( './webpack/dev.config.js' )
};

module.exports = mode=>{
    if( mode ) {
        const envConfig = environments[ mode.env ];

        if( envConfig ) {
            return merge( commonConfig, envConfig );
        }
    }

    return merge( commonConfig, environments.dev );
};

webpack / prod.config.js (пример измое репозиторий на github)

const CleanWebpackPlugin = require( 'clean-webpack-plugin' );
const BundleAnalyzerPlugin = require( 'webpack-bundle-analyzer' ).BundleAnalyzerPlugin;
const webpack = require('webpack');

module.exports = {
    mode: 'production',
    plugins: [
        new CleanWebpackPlugin(),
        new BundleAnalyzerPlugin( {
            analyzerMode: 'disabled',
            generateStatsFile: true
        } ),
        new webpack.NormalModuleReplacementPlugin(
            /src\/environments\/environment.ts/,
            './environment.prod.ts'
        ),
    ],
    devtool: 'source-map'
};

Я уверен, что это не проблема веб-пакета, а неправильное использование.

Репозиторий GitHub: https://github.com/ManticSic/normalModuleReplacmentPlugin-issue-windows
Запуск npm ci и npm run build (или npm run build-dev для dev env).
Важную часть можно найти в конце строки # 1

Ожидается: ...,t.environment={bar:"Prod"}...
Результат на окнах: ...,t.environment={bar:"Normal"}...

1 Ответ

0 голосов
/ 11 мая 2019

Как и ожидалось, проблема была в том, чтобы сидеть перед компьютером ...
Использованы неправильные разделители файловой системы.

Замена \/ на [\\\/] отлично работает!
Полное регулярное выражение: /src[\\\/]environments[\\\/]environment.ts/

...