2014-08-29 228 views
2

我试图使用WebPack来包含“摊牌”。问题是摊牌将需要(“fs”)并检查返回值。这使得WebPack引发错误。如何让webpack跳过一个模块,如果它不存在

看来应该可以配置Webpack来生成一个shim,以便调用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); 
     }); 
    } 
} 

回答

0

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

有一个pull request修复了这还没有合并。

说实话,它看起来像摊牌库不再维护(最后一次提交2012年11月),所以你可能会更好寻找替代品,如果可能的话。

+2

为了记录在案,摊牌是现在回到了新的维护者和pull请求已经被合并。 – pdeschen 2015-01-22 19:11:55

1

此问题应固定在对决V> = 1.0.0

1

它添加到例如noParse

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

而且会的WebPack假设它不包含任何有用调用require

相关问题