我将尝试使用现有的js库(validate.js)在客户端和服务器上进行操作。
我已使用npm安装了该库,并且编译后适用于服务器和客户端。
在服务器中使用它时,它很好地工作,但在浏览器中执行时会抛出错误。
在两种情况下使用相同的文件:
该模块只导出一个函数,在服务器上运行良好,但在客户端调用此函数时出现以下问题:
代码使用目标
在调试时,
有什么想法,为什么它在浏览器中会以这种方式表现?
我已使用npm安装了该库,并且编译后适用于服务器和客户端。
在服务器中使用它时,它很好地工作,但在浏览器中执行时会抛出错误。
在两种情况下使用相同的文件:
import validate = require("validate.js");
export function RequestValidator(data: any): any {
return (validate as any)(data, constraints, { allowEmpty: true });
}
validate
被断言为 any
,否则将会出现以下错误:
TS2349: Cannot invoke an expression whose type lacks a call signature.
我使用的是以下的 .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;
}
该模块只导出一个函数,在服务器上运行良好,但在客户端调用此函数时出现以下问题:
Uncaught TypeError: validate is not a function(…)
代码使用目标
commonjs
来编译服务器端。"use strict";
const validate = require("validate.js");
...
客户端的 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()
...
有什么想法,为什么它在浏览器中会以这种方式表现?
jspm
了吗? - Nitzan Tomer