たAuston Barbozaの:
私はtypescriptですでNPMパッケージをビルドしようとしています。私はtypescriptですモジュールでエクスポートデフォルトの機能を必要とし、使用することはできませんよ。私は、モジュールのオプションを変更しようとしたなかったtsconfig.json
のUMD
とAMD
、ない運。
//index.ts
export default function () {
console.log("greet");
}
export function greet2() {
console.log("greet2");
}
//tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonJS",
"declaration": true,
"outDir": "./lib",
"strict": true
}
}
//index.js
const greet = require("./lib/index");
greet();
greet.greet2();
//console
greet();
^
TypeError: greet is not a function
WebPACKのは、ソリューションのために使用することができる、しかし、私はWebPACKのを使用せずに行うことができますどのような方法があるかどうかを知りたいです。
ケリー・コプリー:
問題は、モジュールの構文を混合していることです。あなたが必要と使用するときは、オブジェクトと戻って得ようとしているdefault
プロパティ、およびgreet2
プロパティを。
require
彼らはちょうどあなたが指定した任意の形状についてであることことができるので、あなたがあなたの輸出は構成されている方法を知っていると仮定しmodule.exports = anything
、厳密な仕様を持っている一方でESモジュール。これは、インポート、エクスポートから来るものの形状をとると便利なあなたのためにそれを構造化代入のようなものを行うことができます。
あなたはそれをログ現在場合、グリート変数はそうのようなオブジェクトになります。
Object {default: function _default(), greet2: function greet2()}
もちろんこれは、関数ので、エラーではありません。
その代わり場合は、インポートの構文を使用します
import greet from './lib/index';
それはと同等のものにコンパイルされます:
const greet = require('./lib/index').default;
あなたはもちろん、この同じやり方で自分を必要と使用することができます、あなただけから返されているものの形状を認識する必要がありrequire
、それに応じてdestructure。