私は通常、フロントエンドで動作するノードモジュールの1つを使用するtypescriptプロジェクトを持っています。私たちは今、サーバー上のノードでこのモジュールを使用しようとしています。私が使用してtypescriptですのRefを含む場合typescriptでes6インポート構文を持つノードモジュールの使用方法
モジュールはES6輸入構文import { props } from 'module/file'
を使用して、次のいずれかの方法
import { props } from 'module/file';
var props = require('module/file');
私はそれだ
unexpected token 'import'
(function (exports, require, module, __filename, __dirname) { import
typescriptですから、次のエラーを取得しますモジュールを書き直す大きな仕事であり、私はbabel-plugin-dynamic-import-nodeとSystemJSを使ってbabelを使ってみました。
これらのシステムの問題点は、すべて非同期であるため、標準的な方法でモジュールをインポートすることができないことです。したがって、私がポイントに達すると、私は一気に書き直す必要があります。 node.jsにネイティブインポートを使用できます
私はこの問題を抱える最初の人になることはできませんが、実際の解決策を見つけることができません。
---------------セットアップで更新------------- @ DanielKhoroshkoの応答に応じて
。私がインポートしようとしている元のモジュールは通常、フロントエンドで使用するためにwebpackによってパッケージ化されています。私は今、require
を使用するようにimports
を書き換えずに、サーバー上で使用するjsをバンドルするためにwebpackを実行せずに、サーバー側とフロントエンド(フロントエンド上のwebpack経由)の両方で同じモジュールを使用しようとしています。 。
当然のことながら、元のモジュールはJSで書かれています。このモジュールを使用しようとしている私たちのサービスは、typescriptで書かれています。タイスクリプトがを使用する古いモジュールrequire
にしようとすると、この時点で問題が発生しています。
------------------いくつかの進捗状況-------------------------- -
私はimportモジュールでnode.jsのbabelを使用してes6コードをcommonJSモジュールに変換するファイルを作成していくつかの進歩を遂げました。
私は今、私の新しいNode.jsのプロジェクトでstore
を得ることができます
var babel = require("babel-core")
var store = babel.transformFileSync(__dirname + '/store.js', {
plugins: ["transform-es2015-modules-commonjs"]
});
module.exports = {
store: store.code
}
を経由して、これをやりました。ただし、store.js
ファイル内のサブモジュールはエクスポートに含まれません。
だからここで私のモジュールでは、それは import activities from './reducers/activities';
言う私は今、エラー Cannot find module './reducers/activities'
は、どのように私はバベルのサブディレクトリが含まれるように、深いトラバーサルを行うために取得することができますか?
ノードするES6から一貫したビルドを取得するにはバベルを実行する必要がありました - フォーマットcjs'。あるいは、SystemJSを使用してサーバーサイドアプリケーションをロードすることもできます。 –
@AluanHaddadありがとう、私はSystemJSの一部として '--format cjs'を見たことはありませんでした。私がSystemJSで経験している問題は、必要なモジュールが約束として返され、サーバ側とクライアント側の両方に利用可能なモジュールの記述方法に影響があることです。 – pedalpete