2015-11-07 61 views
0

我在我的服務器文件中使用網絡包,但是當我嘗試使用__dirname而沒有網絡包時,它的工作原理與'/ Users/user_name/Desktop/project_name'類似,但運行時通過webpack建立的文件在做__dirname登錄時會返回簡單的'/'。爲什麼會發生?節點絕對值與webpack無效

目錄是這樣的:

/node_modules 
/src 
--/cloud 
----/main.js 
--/static 
----/markups 
------/index.html 
----/scripts 
------/index.js 
----/bundles 
/package.json 
/webpack.config.js 

配置文件作爲

var path = require('path'); 
var fs = require('fs'); 

var nodeModules = {}; 
fs.readdirSync('node_modules') 
    .filter(function (x) { 
    return ['.bin'].indexOf(x) === -1; 
    }) 
    .forEach(function (mod) { 
    nodeModules[mod] = 'commonjs ' + mod; 
    }); 

module.exports = [ 
    { 
    name: 'server', 
    target: 'node', 
    context: path.join(__dirname, 'src', 'cloud'), 
    entry: './main.js', 
    output: { 
     path: path.join(__dirname), 
     filename: 'server.js' 
    }, 
    externals: nodeModules, 
    module: { 
     loaders: [ 
     {test: /\.js$/, exclude: /node_modules/, loaders: ['babel-loader?presets[]=es2015']} 
     ] 
    }, 
    resolve: { 
     root: path.join(__dirname), 
     fallback: path.join(__dirname, 'node_modules'), 
     modulesDirectories: ['node_modules'], 
    } 
    }, 
    { 
    name: 'client', 
    context: path.join(__dirname, 'src', 'static'), 
    entry: { 
     index: './scripts/index.js' 
    }, 
    output: { 
     path: path.join(__dirname, 'src', 'static', 'bundles'), 
     filename: '[name].js' 
    }, 
    module: { 
     loaders: [ 
     { 
      test: /\.js$/, 
      loader: 'babel', 
      query: { 
      presets: ['es2015', 'stage-0'] 
      } 
     } 
     ] 
    }, 
    resolve: { 
     root: path.join(__dirname), 
     fallback: path.join(__dirname, 'node_modules'), 
     modulesDirectories: ['node_modules'], 
    } 
    } 
]; 

回答

1

的WebPack使用它自己的模塊來處理__dirname,默認配置是mock這意味着「/「。這就是爲什麼你沒有獲得絕對路徑。

Ref: api in modules # __dirname

(我只能回答你Why does this happen? 我得到了同樣的問題,像你這樣做,但還是找到了解決方案,能夠有人可以提供一些線索;?))