我试图使用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);
});
}
}
答案 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月最后一次提交),所以如果可能的话,你最好还是寻找替代方案。