在节点模块中处理__dirname
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在节点模块中处理__dirname相关的知识,希望对你有一定的参考价值。
我正在使用pdfkit
包,它本身使用fontkit
。在开发模式下运行包含Express应用程序时生成PDF文件可以正常工作,但是当应用程序与webpack捆绑在一起时,解析某些路径似乎不起作用。
我已经提交了issue,但我的问题更为一般:
如果npm包使用__dirname
某处访问相对路径,我该如何配置webpack来考虑它?
这是我目前的配置:
var Webpack = require('webpack');
var path = require('path');
var buildPath = path.resolve(__dirname, 'build');
var mainPath = path.resolve(__dirname, 'src', 'app.js');
var config = {
target: 'node',
entry: mainPath,
output: {
path: buildPath,
filename: 'bundle.js'
},
node: {
console: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
dns: 'empty',
__dirname: false,
__filename: false
},
module: {
loaders: [
{
test: /.js$/,
loader: 'babel',
query: {
presets: ['es2015']
}
},
{
test: /.json$/,
loader: 'json'
},
]
}
};
module.exports = config;
我认为导致fontkit问题的那一行是:
var trie = new UnicodeTrie(require('fs').readFileSync(__dirname + '/data.trie'));
答案
您需要在webpack.config中将__dirname设置为true
node: {
__dirname: true
}
以上是关于在节点模块中处理__dirname的主要内容,如果未能解决你的问题,请参考以下文章
使用 ES6 模块时 Node.js 中 __dirname 的替代方案