在节点模块中处理__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 的替代方案

__dirname 在带有 webpack 捆绑的节点 js 中不起作用

python中os模块获取路径的几种方式

python小知识片段

python小知识片段

相对文件的节点模块路径