2016-09-25 71 views
0

我想学习webpack,并且我认为我很困惑__dirname并获得正确的入口文件的工作。基本上,我想要使用的文件位于app/index.js,而我的server.jswebpack.config.js位于config/在我的webpack配置中遇到了一些麻烦,我想我很困惑我使用的目录结构

我当我的根保持server.jswebpack.config.js这个工作正常,但我想将其移动到config文件夹,我还增加了,而不是保持app的内容,因为它是正确的app文件夹现在在根。

我有以下文件结构:

. 
|++[app] 
|----[actions] 
|----[modules] 
|----[reducers] 
|----[store] 
|----index.html 
|----index.js 
|--[config] 
|----server.js 
|----webpack.config.js 
|--[node_modules] 
|--package.json 

我已经在我的server.js如下:

var webpack = require('webpack'); 
var webpackDevMiddleware = require('webpack-dev-middleware'); 
var webpackHotMiddleware = require('webpack-hot-middleware'); 
var config = require('./webpack.config'); 
var path = require('path'); 
var app = new (require('express'))(); 
var port = 9001; 

var compiler = webpack(config); 
app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: config.output.publicPath })); 
app.use(webpackHotMiddleware(compiler)); 

app.get('/*', function(req, res) { 
    res.sendFile(path.resolve(__dirname) + 'app/index.html'); 
}); 

app.listen(port, function(error) { 
    if (error) { 
    console.error(error); 
    } else { 
    console.info('started on localhost://%s.', port); 
    } 
}); 

而且webpack.config.js

var webpack = require('webpack'); 
var path = require('path'); 
var autoprefixer = require('autoprefixer'); 
var isProd = process.env.NODE_ENV === 'production'; 

module.exports = { 
    devtool: isProd ? null : 'source-map', 
    entry: 'app/index.js', 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'bundle.js', 
    publicPath: '/static/' 
    }, 
    resolve: { 
    root: path.resolve(__dirname, 'app'), 
    extensions: ['', '.js', '.jsx'] 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.jsx?$/, 
     loaders: [ 
      'react-hot', 
      'babel' 
     ], 
     include: path.join(__dirname, ''), 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.(png|jpg)$/, 
     loader: 'file-loader?name=img/[name].[ext]' 
     }, 
     { 
     test: /\.scss$/, 
     loader: 'style!css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]!postcss!sass' 
     } 
    ] 
    }, 
    plugins: [ 
    new webpack.optimize.OccurenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin() 
    ], 
    postcss: [ 
    autoprefixer({ browsers: ['last 3 versions'] }) 
    ] 
}; 

回答

0

如果有帮助,下面是我目前的webpack配置

import path from 'path'; 
import webpack from 'webpack'; 

export default { 
    target: 'node', 
    node: { 
    // prevents webpack from overwriting the values from node 
    // https://github.com/webpack/webpack/issues/1599 
    __dirname: false, 
    __filename: false 
    }, 
    devtool: 'source-map', 
    resolve: { 
    root: path.resolve(__dirname + '/app'), 
    extensions: ['', '.js'] 
    }, 
    entry: { 
    server: './app/app' 
    }, 
    output: { 
    path: path.join(__dirname + '/../dist'), 
    filename: '[name].bundle.js', 
    libraryTarget: 'commonjs' 
    }, 
    // prevents node_modules from being bundled by webpack 
    externals: [/^(?!\.|\/).+/i,], 
    module: { 
    loaders: [{ 
     loader: 'babel-loader', 
     test: /\.js$/, 
     exclude: /(node_modules|dist)/, 
     cacheDirectory: 'webpack-cache', 
     query: { 
     presets: ['es2015'], 
     plugins: [ 
      'transform-runtime', 
      'transform-async-to-generator' 
     ] 
     } 
    }] 
    } 
} 
+0

谢谢!所以我认为'__dirname'在我的情况下是'。/ config'。有没有办法告诉路径去根? – user1354934

+0

@ user1354934查看解析:{}部分。如果我明白你想要什么,你可以设置你的应用程序的根目录(webpack将在那里工作)。 “__dirname”是代码所在路径的一个node.js快捷方式。因此,您可以追加__dirname +'../'等等。 – Geuis

+0

谢谢!让我试试这个。对不起,我是小白。谢谢 – user1354934

相关问题