Не удается найти модуль "алгоритмы /RSASSA-PKCS1-v1_5", используя Angular 6 и rdflib 0.19.0
Я занимаюсь разработкой твердого приложения Angular6+ ( кодовая база). Само приложение зависит от:
"crypto-js": "^3.1.9-1",
"rdflib": "^0.19.0",
"solid-auth-client": "^2.2.6",
"stream": "0.0.2",
"webcrypto": "^0.1.1",
"zone.js": "^0.8.26"
То, что я пытаюсь сделать, это удалить ресурс RDF с помощью rdflib.UpdateManager.update()
:
$rdf.UpdateManager(this.store).update(toBeDeleted, [], (uri, ok, message, response) => {
if (ok) {
console.log('DELETED')
} else {
console.warn(message)
}
})
Вы можете найти больше JSDoc оUpdateManager
здесь и введение rdflib.js здесь.
Теперь с помощью Firefox 63.0b12 (64-bit)
Я продолжаю получать следующую ошибку, которая, я думаю, может быть связана с тем фактом, что доступ кAPI-интерфейсу WebCrypto должен быть ограничен безопасным источником (то естьhttps://
страницы). Та же ошибка выдается при использовании Opera.
Unhandled Promise rejection: Cannot find module "../algorithms/RSASSA-PKCS1-v1_5". ; Zone: <root> ; Task: Promise.then ; Value: Error: Cannot find module "../algorithms/RSASSA-PKCS1-v1_5".
at webpackEmptyContext (algorithms sync:2)
at SupportedAlgorithms.normalize (SupportedAlgorithms.js:84)
at SubtleCrypto.importKey (SubtleCrypto.js:279)
at RSASSA_PKCS1_v1_5.importKey (RSASSA-PKCS1-v1_5.js:124)
at Function.importKey (JWA.js:113)
at Function.importKey (JWK.js:46)
at Function.issueFor (PoPToken.js:57)
at webid-oidc.js:183
at fetchWithCredentials (authn-fetch.js:63)
at authn-fetch.js:41 Error: Cannot find module "../algorithms/RSASSA-PKCS1-v1_5".
at webpackEmptyContext (http://localhost:4200/main.js:11:10)
at SupportedAlgorithms.normalize (http://localhost:4200/vendor.js:132732:107)
at SubtleCrypto.importKey (http://localhost:4200/vendor.js:132336:51)
at RSASSA_PKCS1_v1_5.importKey (http://localhost:4200/vendor.js:124747:28)
at Function.importKey (http://localhost:4200/vendor.js:125342:34)
at Function.importKey (http://localhost:4200/vendor.js:125411:18)
at Function.issueFor (http://localhost:4200/vendor.js:127189:18)
at http://localhost:4200/vendor.js:185374:44
at fetchWithCredentials (http://localhost:4200/vendor.js:184423:49)
at http://localhost:4200/vendor.js:184401:16
Я пропускаю зависимость от npm?Какова основная причина этой проблемы?
2 ответа
Я получаю ту же ошибку при вызове этого кода:
import auth from 'solid-auth-client';
// for example in a button click handling, this gives me the error:
auth.logout();
Используя пряжу, webpack 4 и babel 7
зависимости:
"@material-ui/core": "^3.2.0",
"rdflib": "^0.19.0",
"react": "^16.5.2",
"react-dom": "^16.5.2"
То, как модуль "@trust/webcrypto" (версия 0.9.2) обрабатывает динамическую загрузку других модулей, вызывает предупреждение в моей сборке:
WARNING in ./node_modules/@trust/webcrypto/src/algorithms/SupportedAlgorithms.js 84:22-60
Critical dependency: the request of a dependency is an expression
@ ./node_modules/@trust/webcrypto/src/algorithms/index.js
@ ./node_modules/@trust/webcrypto/src/SubtleCrypto.js
@ ./node_modules/@trust/webcrypto/src/Crypto.js
@ ./node_modules/@trust/webcrypto/src/index.js
@ ./node_modules/@solid/oidc-rp/src/AuthenticationRequest.js
@ ./node_modules/@solid/oidc-rp/src/RelyingParty.js
@ ./node_modules/@solid/oidc-rp/src/index.js
@ ./node_modules/solid-auth-client/lib/webid-oidc.js
@ ./node_modules/solid-auth-client/lib/solid-auth-client.js
@ ./node_modules/solid-auth-client/lib/index.js
@ ./src/main/index.js
@ multi (webpack)-dev-server/client?http://localhost:3000 @babel/polyfill ./src/main/index.js
Звучит несколько связано...
Дмитрий Загидулин ответил на мою проблему (и на мой запрос о том, что я считаю обходным путем) здесь: https://github.com/anvilresearch/webcrypto/pull/80
@trust/webcrypto
Модуль предназначен только как модуль NodeJS на бэкэнде. Чтобы исключить его из комплектации веб-пакета, его заменяют внешним модулем (предоставляемым браузером), таким как этот:
externals: {
'@trust/webcrypto': 'crypto',
'text-encoding': 'TextEncoder',
}
PS: он также рекомендовал использовать модуль кодирования текста, который также является модулем, доступным в браузере.