如何让webpack在模块不存在时跳过它?

3
我正在尝试使用 WebPack 来包含 "showdown"。问题在于 showdown 会 require("fs") 并检查返回值。这会导致 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);
        });
    }
}
4个回答

2
将其添加到noParse中,例如。
var config = {
    output: {
        path: buildPath,
        filename: 'bundle.js'
    },
    module: {
        noParse: [
            /showdown/,
        ],

Webpack会假设它不包含任何对require的有用调用。


2

1
这个问题应该在 showdown v >=1.0.0 中得到解决。

0

这似乎是一个Showdown问题,而不是webpack的问题。需要fs的代码旨在仅在node环境中运行。不幸的是,在检查它是否在node中运行的代码中有一些拼写错误(您发布的代码中的第一个if语句,undefind而不是undefined)。

有一个拉取请求可以修复这个问题,但尚未合并。

老实说,看起来Showdown库已经不再维护(最后提交于2012年11月),如果可能的话,您最好寻找替代品。


2
就记录而言,showdown现在有新的维护者,并且该拉取请求已经合并。 - pdeschen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接