私のコードがうまくいかない理由がわかりません。Babel、webpack、Node.jsでデフォルトエクスポートを行う
私はES6スタイルのクラスを構築しています。それをエクスポートして、サーバー側の別の場所で使用できるようにしたいとします。コードをserver
フォルダのPlayerManager.js
というファイルに挿入しました。
クライアントコードをsrc
フォルダに入れました。私のサーバコードはserver
フォルダにあり、server.js
はserver
フォルダの外です。ここで
は、ディレクトリ構造である:
Root
- dist
- node_modules
- public
- server
- src
server.js
webpack.base.js
webpack.dist.js
package.json
.babelrc
PlayerManager.js
ファイル:私はnode server.js
を実行するnpm run dev
を使用する場合
class PlayerManager {
constructor() {
if (! PlayerManager.instance) {
this.playerList = {};
this.bulletList = {};
this.initPack = {player: [], bullet: []};
this.removePack = {player: [], bullet: []};
PlayerManager.instance = this;
}
return PlayerManager.instance;
}
resetData() {
this.initPack.player = [];
this.initPack.bullet = [];
this.removePack.player = [];
this.removePack.bullet = [];
}
}
const instance = new PlayerManager();
Object.freeze(instance);
export default instance;
しかし、それはここで
export default instance;
^^^^^^
SyntaxError: Unexpected token export
at Object.exports.runInThisContext (vm.js:53:16)
を言って、エラーをスローしていますwebpacのbabelの設定K:
const path = require('path');
var CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: {
main: './src/main'
},
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].bundle.js'
},
plugins: [
new CopyWebpackPlugin([
{ from: 'public/img',
to: 'static' },
{ from: 'public' }
])
],
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel',
//include: path.join(__dirname, 'src')
exclude: [
path.resolve(__dirname, "node_modules"),
],
},
{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=90000' }
]
},
resolve: {
extensions: ['', '.js']
}
};
.babelrc
で:私のpackage.json
ファイルで
{
"presets": [
"es2015"
],
"sourceRoot": "./src"
}
:
"scripts": {
"build": "npm run lint && npm run release",
"lint": "./node_modules/.bin/eslint ./src/**/*.js",
"dev": "node server.js",
"release": "NODE_ENV=production webpack --config ./webpack.dist.js --progress",
"test": "./test/*.test.js --compilers js:babel-core/register --recursive --reporter spec"
},
また、主に開発中の使用のために、[ 'バベル-cli']で'バベル-node'インタプリタ(HTTPSがあります。io/docs/usage/cli /)パッケージを使用して、転送する必要があるコードを直接実行することができます。または、['node'ターゲット](http://webpack.github.io/docs/configuration.html#target)を使用してサーバーコードをバンドルするWebpack構成を作成します。 – robertklep
私は参照してください。なぜ私は 'server.js'ファイルを要求する必要がありますか?このファイルは私のサーバーサイドコードのエントリーファイルです。 – newguy
@newguy 'server.js'をロードする前にBabelのrequireフックをロードしなければなりません。そうしないと、require文がBabelによって傍受されず、ソースファイルが転送されません。 (あなたは今と同じエラーが表示されます) – sdgluck