クライアントとサーバーの両方に既存のjsライブラリ(validate.js)を使用しようとしています。systemjsでインポートが正しく行われない
npmを使用してインストールしました。すべてがサーバーとクライアントの両方でコンパイルされます。
サーバーで使用するとうまくいきますが、ブラウザで実行するとエラーが発生します。
同じファイルが両方の場合に使用されます。
import validate = require("validate.js");
export function RequestValidator(data: any): any {
return (validate as any)(data, constraints, { allowEmpty: true });
}
validate
はbecuase any
にアサートされているそれ以外の場合は私が手:
TS2349:そのタイプのコールサインを欠い表現を呼び出すことはできません。
私が使用している.d.ts
は次のとおりです。
declare module "validate.js" {
export interface ValidateJS {
(attributes: any, constraints: any, options?: any): any;
async(attributes: any, constraints: any, options?: any): Promise<any>;
single(value: any, constraints: any, options?: any): any;
}
export const validate: ValidateJS;
export default validate;
}
モジュールは、機能のみをエクスポートし、それがサーバーにうまく動作しますが、この関数を呼び出すとき、クライアントに私が取得:
"use strict";
const validate = require("validate.js");
...
:
Uncaught TypeError: validate is not a function(…)
コードは、サーバのためのターゲットcommonjs
を使用してコンパイルされています
とクライアントのためのsystem
:
System.register(["validate.js"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var validate;
...
return {
setters:[
function (validate_1) {
validate = validate_1;
}],
...
はそれをデバッグ、validate
は確かにそれはだ関数ではありません。
validate: r
EMPTY_STRING_REGEXP: (...)
get EMPTY_STRING_REGEXP: function()
set EMPTY_STRING_REGEXP: function()
Promise: (...)
get Promise: function()
set Promise: function()
__useDefault: (...)
get __useDefault: function()
set __useDefault: function()
async: (...)
get async: function()
set async: function()
capitalize: (...)
get capitalize: function()
set capitalize: function()
cleanAttributes: (...)
get cleanAttributes: function()
set cleanAttributes: function()
...
に行くと、なぜそれがブラウザでこのように動作しているものすべてのアイデア?
この段落の最後の文は、CommonJS:https://github.com/systemjs/systemjs/blob/master/docs/module-formats.md#commonjsを参照してください。 SystemJSは、NodeJSとまったく同じ方法でCommonJSモジュールをロードしません。 '@ node'はありますが、私はこの種の黒い魔法に個人的な経験はありません。 – martin
@martinまあ、ダンディーではありません。私は特に気に入っています:「これは、コードが普遍的ではなく、NodeJSとしか互換性がないため、絶対に必要なときに使用してください。だから私は 'jspm'も使うように強制されているのですか? –
私はそのオプションを自分で使ったことは一度もありませんでしたが、私はそこに言及したことを覚えています... – martin