Могу ли я скомпилировать библиотеку SJCL с помощью компилятора закрытия Google? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть ванильный javascript проект, который скомпилирован и минимизирован с помощью Closure Compiler v20181210. Я хочу использовать SJCL в этом проекте для криптографии.

Я скопировал этот файл в свой собственный проект и написал код, используя библиотеку. Но когда я пытаюсь его скомпилировать, Closure Compiler выдает кучу ошибок из библиотеки (вставлено ниже).

На сайте SJCL написано, что файл сжат с помощью Google Closure Compressor. Итак, я полагаю, он должен быть совместим с Closure? Почему тогда он не компилируется?

Еще я читал про externs. Но я хочу, чтобы весь код был в одном минифицированном файле. С externs, похоже, мне понадобится еще один импорт для SJCL.

Некоторые из ошибок компилятора Closure:

ERROR - cannot instantiate non-constructor
     [java] sjcl.hash.sha256=function(a){this._key[0]||this._precompute();a?(this._h=a._h.slice(0),this._buffer=a._buffer.slice(0),this._length=a._length):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};


ERROR - Suspicious code. The result of the 'getprop' operator is not being used.
     [java]     (p^l))+d[b];q=l;l=p;p=h;h=n+g|0;n=k;k=f;f=e;e=g+(f&k^n&(f^k))+(f>>>2^f>>>13^f>>>22^f<<30^f<<19^f<<10)|0}c[0]=c[0]+e|0;c[1]=c[1]+f|0;c[2]=c[2]+k|0;c[3]=c[3]+n|0;c[4]=c[4]+h|0;c[5]=c[5]+p|0;c[6]=c[6]+l|0;c[7]=c[7]+q|0}};"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl});


ERROR - actual parameter 3 of AnyStorageProvider.prototype.setItem does not match formal parameter
     [java] found   : string
     [java] required: (number|undefined)
     [java]     toucan.storage.Any.setItem(LOGIN_STATE_CACHE_KEY, loginState, 'session');

EDIT: я запускаю компилятор Closure со всеми этими аргументами. Когда я их удаляю, проект компилируется. Но я не уверен, безопасно ли их удалить?

<arg line="--jscomp_error accessControls --jscomp_error ambiguousFunctionDecl --jscomp_error checkRegExp --jscomp_error checkTypes --jscomp_error checkVars --jscomp_error const --jscomp_error constantProperty --jscomp_error duplicateMessage --jscomp_error externsValidation --jscomp_error fileoverviewTags --jscomp_error globalThis --jscomp_error internetExplorerChecks --jscomp_error invalidCasts --jscomp_error missingProperties --jscomp_error nonStandardJsDocs --jscomp_error strictModuleDepCheck --jscomp_error typeInvalidation --jscomp_error undefinedNames --jscomp_error undefinedVars --jscomp_error unknownDefines --jscomp_error uselessCode --jscomp_error visibility"/>

1 Ответ

0 голосов
/ 20 июня 2020

Closure Compiler выдавал ошибки для SJCL из-за jscomp_error флагов, которые я использовал для моего собственного проекта. Без них sjcl. js компилируется нормально.

Я исправил это, добавив --hide_warnings_for='sjcl.js'

Таким образом, остальная часть проекта по-прежнему использует эти флаги, но sjcl компилируется нормально.

...