如果不存在,我怎么能让webpack跳过一个模块

时间:2014-08-29 09:36:55

标签: javascript require webpack showdown

我试图使用WebPack来包含" showdown"。问题是摊牌需要(" fs")并检查返回值。这使得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 个答案:

答案 0 :(得分:2)

解决方案是切换到标记为:https://www.npmjs.org/package/marked。就模块而言,摊牌库是有问题的。

答案 1 :(得分:1)

此问题应在showdown v> = 1.0.0

中修复

答案 2 :(得分:1)

将其添加到noParse,例如

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

并且webpack会认为它不包含对require的任何有用的调用

答案 3 :(得分:0)

这似乎是一个摊牌问题,而不是一个webpack问题。需要fs的代码仅用于在节点环境中运行。不幸的是,代码中存在一些错别字,用于检查它是否在节点中运行(您发布的代码中的第一个if语句,undefind而不是undefined)。

有一个pull request修复了这个尚未合并的内容。

说实话,看起来不再维护Showdown库(2012年11月最后一次提交),所以如果可能的话,你最好还是寻找替代方案。