質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

3425閲覧

node.jsのrequireについて教えて下さい

yoppy0066

総合スコア293

Babel

Babelは、JavaScriptの次世代仕様であるECMAScriptのコンパイラ。次世代の標準機能を用いて記述されたコードを、それらの機能に対応していないブラウザでも動作するコードに変換することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

1グッド

0クリップ

投稿2016/09/02 12:41

server.js

var express = require("express"); var aaaaa = require("../public/assets/aaaaa.js"); aaaaa(); // ここでエラー ・・・

node server.jsで起動

src/aaaaa.js

export default function my_func() { console.log("my_func is called"); }

ビルド

watchify -v -t babelify src/aaaaa.js -o public/assets/aaaaa.js

上記の形で実装するとserver.jsのaaaaa();でfunctionが定義されていないというエラーになってしまうのですが何故そうなってしまうかわかりません、書き方がおかしいでしょうか?

mit0223👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょっと時間がたってしまいましたが、このたび、私も browserify, babelify を使ってみることになって、この質問を思い出しました。

まず、 .babelrc で es2015 を preset されてませんか?

javascript

1{presets: ["es2015"]}

私の環境では、これを入れないと browseify 時点で以下のエラーになってしまいました。

export default function my_func() { ^ ParseError: 'import' and 'export' may appear only with 'sourceType: module'

で、es2015のサイトをみると、moduleの呼び方が変わっていて、require ではなく import を使うのではないでしょうか?で、es2015 の export と普通の requireを混ぜて使えるかはわからなかったので、server.js 側も修正して

server.js

JavaScript

1import aaaaa from "./src/aaaaa.js"; 2 3aaaaa();

ビルド&実行

$ browserify -v -t babelify server.js src/aaaaa.js -o bundle.js $ node bundle.js my_func is called

で動作しました。

投稿2016/09/02 12:49

編集2016/09/09 10:51
mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoppy0066

2016/09/02 12:51

ありがとうございます。ご指摘の通りに修正してみたいのですが aaaaa.my_func is not a function となってしまいました
yoppy0066

2016/09/02 13:16

npm install babelして以下を追記したのですが結果が変わりませんでした require('babel-core/register'); var aaaaa = require("../public/assets/aaaaa.js"); //var aaaaa = require("../public/assets/aaaaa.js").default(); // これはエラー //var aaaaa = require("../public/assets/aaaaa.js").default; // これはdefault is undefined console.log(aaaaa); // {}
mit0223

2016/09/02 13:19

申し訳ありません。ギブアップします。
yoppy0066

2016/09/09 12:14

ありがとうございます。 私もes6で書いてbabelでビルドする形で動作させました。 また、検索していたらbabel-nodeというのがあって、サーバー側は今回はこちらを使うことにしました ただ、requireが本当に使えないものなのかというのが解決できなかったので放置としていました。。。
mit0223

2016/09/09 12:26

なるほど、サーバとクライアントのコードを共通化させるという要件なんですね。私も勉強になりました。requireについてはおそらく反対方向にはbabelifyできるのではないかと思います。古いモジュールをes6にインポートはできるけど、新しいモジュールを古い言語から呼ぶのは実装を考えると難しそう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問