読者です 読者をやめる 読者になる 読者になる

【node.js】export defaultで作ったモジュールをexpressからrequireできなくてes6にして対応した

node.js javascript

はじめに

以下のようなディレクトリ構成で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で書いた方が統一できて結果的には良かったのかな。。。

たぶん変なことやっているのでアドバイスしてくれる方お願いいたします、以上です