2015-11-05 16 views
1

我有一個項目,我正在用ES6中的節點在使用巴貝爾節點運行。現在我試圖以更多的生產方式實施babel,並嘗試了兩次嘗試。巴別爾有進口陳述的問題

的WebPack巴貝爾,裝載機配置如下:

module.exports = { 
    entry: './src/cloud/main.js', 
    devtool: 'source-map', 
    output: { 
    path: './src/static/build', 
    filename: 'bundle.js' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loaders: [ 
      'babel-loader?presets[]=es2015', 
     ], 
     }, 
     { 
     test: /\.css$/, 
     loaders: [ 
      'style-loader', 
      'css-loader', 
     ], 
     }, 
     { 
     test: /\.html$/, 
     loaders: [ 
      'raw-loader', 
     ], 
     }, 
    ], 
    }, 
} 

它開始抱怨在main.js import語句和沉默它,我用?presets[]=es2015我在一個類似的問題找到。然後,問題到達,其中過濾到導入語句到node_modules與以下消息:

錯誤在./~/socket.io/lib/index.js 模塊未找到:錯誤:無法解析模塊在

我的另一種方法「FS」是與寄存器鉤這樣的:

require('babel-core/register')({ 
    ignore: /node_modules/, 
}); 
require('./main.js'); 

但它拋出此消息:從「表達」 進口快件; ^^^^^^

語法錯誤:意外的保留字

//main.js - 簡化

import express from 'express' 
const app = express() 
const server = app.listen(port,() => { 
    console.log(`Listening at http://${server.address().address === '::' ? 'localhost' : server.address().address}:${server.address().port}`) 
}) 
+0

看看這個答案在運行Babel。 http://stackoverflow.com/questions/30921806/getting-es6-to-work-in-webstorm – Dirk

回答

1

我不認爲你需要排除node_modules在裝載機配置。但是,您可能想讓webpack知道要解決什麼問題。嘗試添加這樣的事情:

resolve: { 
    root: path.join(__dirname), 
    fallback: path.join(__dirname, 'node_modules'), 
    modulesDirectories: ['node_modules'], 
    extensions: ['', '.json', '.js', '.jsx', '.scss', '.png', '.jpg', '.jpeg', '.gif'] 
}, 

modulesDirectories關鍵應該保持的WebPack運行下來每一個需要在工作目錄/導入。

此外,增加目標你的配置的頂部應解決的問題與內建像fs

target: 'node' 
+0

我已經添加了你說的部分,並減少了main.js只有'var express = require('express') ;」供測試用。此錯誤現在在/〜/express/lib/view.js中顯示爲警告 嚴重依賴關係: 78:29-56依賴項請求是表達式 @ /〜/express/lib/view.js 78:29- 56 錯誤在./~/express/~/send/~/statuses/codes.json中 模塊解析失敗:/node_modules/express/node_modules/send/node_modules/statuses/codes.json第2行:意外令牌 –

1

好吧,我想通了感謝其他的答案和4m1r的回答。我發佈了示例代碼。

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: { 
    server: './main.js' 
    }, 
    output: { 
    path: path.join(__dirname), 
    filename: '[name].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'], 
    } 
}; 

什麼是真正重要的太是關鍵的外部其阻止它來回泄漏到node_modules通過要求並指定在通天裝載機某種原因?presets[]=2015。我接受4m1r,因爲它終於修復了代碼。