2

我正在尝试使用 WebPack 来包含“摊牌”。问题是摊牌将需要(“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

4 回答 4

2

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

于 2014-09-02T09:02:47.923 回答
1

将其添加到noParse例如

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

并且 webpack 会假设它不包含任何有用的调用require

于 2015-11-05T06:42:21.557 回答
1

此问题应在摊牌 v >=1.0.0 中修复

于 2015-07-20T23:07:56.347 回答
0

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

有一个pull request修复了这个尚未合并的问题。

老实说,Showdown 库似乎不再维护(最后一次提交于 2012 年 11 月),所以如果可能的话,你最好寻找一个替代方案。

于 2014-09-02T04:46:13.077 回答