【node.js】export defaultで作ったモジュールをexpressからrequireできなくてes6にして対応した
はじめに
以下のようなディレクトリ構成でserver以下にexpressでサーバーを作成。
で、client以下にreactとかでフロント側のコードを作成。
で、common以下にserverとclientと両方から呼ばれるモジュールとかを置こうとした。
clientとcommonはbabelでビルドする想定でes6で記述
serverはそのままnode.jsの記述
. ├── client │ └── app.js ├── common │ ├── m1.js │ └── m2.js └── server └── app.js
common/m1.js ※es6で
export default function m1() { ・・・ }
client/app.js ※es6で
import m1 from "../common/m1"; m1();
server/app.js
var express = require('express'); var m1 = require("../common/m1"); ・・・ m1(); // ★ m1 is not functionとエラーになってしまう
となり上手くいかなかった
javascript - Can't require() default export value in Babel 6.x - Stack Overflow
この辺に解決策がありそうで試して見たけど上手くいかず
expressサーバー側もes6で
babel-cliというのを使えばes6で書いたコードを読んで起動してくれるらしいのでコレ使った
server/app.js
import express from "express"; import m1 from "../common/m1"; ・・・ m1(); // ★ちゃんと呼べる
babel-cliインストール
$ npm install babel-cli --save
サーバー起動
$ ./node_modules/.bin/babel-node server/app.js
いちおう結果的にはok
おわりに
いろいろちゃんと理解していないからできるかできないのかわからなかった。
まぁserver側もes6で書いた方が統一できて結果的には良かったのかな。。。
たぶん変なことやっているのでアドバイスしてくれる方お願いいたします、以上です