Как я могу иметь веб-пакет пропустить модуль, если он не существует

Я пытаюсь использовать WebPack, чтобы включить "вскрытие". Проблема в том, что для вскрытия потребуется ("фс") и проверить возвращаемое значение. Это заставляет WebPack выдавать ошибку.

Похоже, что должна быть возможность настроить Webpack для генерации прокладки так, чтобы требование require("fs") возвращало false.

Может быть, один из этих методов может работать: http://webpack.github.io/docs/shimming-modules.html

Вот код Showdown.js. Если я закомментирую этот код в каталоге узловых модулей, проблема будет решена. Однако должен быть лучший способ.

//
// Automatic Extension Loading (node only):
//

if (typeof module !== 'undefind' && typeof exports !== 'undefined' && typeof require !== 'undefind') {
    var fs = require('fs');

    if (fs) {
        // Search extensions folder
        var extensions = fs.readdirSync((__dirname || '.')+'/extensions').filter(function(file){
            return ~file.indexOf('.js');
        }).map(function(file){
            return file.replace(/\.js$/, '');
        });
        // Load extensions into Showdown namespace
        Showdown.forEach(extensions, function(ext){
            var name = stdExtName(ext);
            Showdown.extensions[name] = require('./extensions/' + ext);
        });
    }
}

4 ответа

Добавьте это к noParse например

var config = {
    output: {
        path: buildPath,
        filename: 'bundle.js'
    },
    module: {
        noParse: [
            /showdown/,
        ],

И веб-пакет будет предполагать, что он не содержит никаких полезных вызовов require

Решением было переключиться на помеченные: https://www.npmjs.org/package/marked. Библиотека вскрытия проблематична в том, что касается модулей.

Эта проблема должна быть исправлена ​​в showdown v >=1.0.0

Похоже, что это проблема Showdown, а не проблема веб-пакета. Код, который требует fs предназначен для запуска только в среде узла. К сожалению, в коде есть некоторые опечатки, которые проверяют, работает ли он в узле (первый оператор if в опубликованном вами коде, undefind вместо undefined).

Есть исправление запроса, который исправляет это, которое еще не было объединено.

Честно говоря, похоже, что библиотека Showdown больше не поддерживается (последний коммит ноябрь 2012 г.), поэтому вам лучше будет поискать альтернативу, если это возможно.

Другие вопросы по тегам