Привет, У меня есть веб-приложение Aurelia, работающее с Aurelia CLI.Aurelia с защитой от нокаута
Раньше я использовал SystemJS в качестве загрузчика модулей, но поскольку я хочу применить политику безопасности контента для своего приложения, чтобы не разрешать «небезопасную-eval», я перешел на CLI Aurelia, как мне было предложено this question.
Мое приложение - это бывшее приложение Durandal, которое я конвертирую в Aurelia, поэтому он широко использует Knockout. Я использую Aurelia-нокаутирующий плагин (как вы можете видеть в моем main.js)
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging()
.plugin('aurelia-knockout');
return aurelia.start().then(() => aurelia.setRoot());
}
и я установил как нокаут и нокаут-безопасный-связывание пакетов НПХ и сконфигурированные их в aurelia.json файл:
"dependencies": [
"aurelia-binding",
"aurelia-bootstrapper",
"aurelia-dependency-injection",
"aurelia-event-aggregator",
"aurelia-framework",
"aurelia-history",
"aurelia-history-browser",
"aurelia-loader",
"aurelia-loader-default",
"aurelia-logging",
"aurelia-logging-console",
"aurelia-metadata",
"aurelia-pal",
"aurelia-pal-browser",
"aurelia-path",
"aurelia-polyfills",
"aurelia-route-recognizer",
"aurelia-router",
"aurelia-task-queue",
"aurelia-templating",
"aurelia-templating-binding",
{
"name": "text",
"path": "../scripts/lib/text"
},
{
"name": "aurelia-templating-resources",
"path": "../node_modules/aurelia-templating-resources/dist/amd",
"main": "aurelia-templating-resources"
},
{
"name": "aurelia-templating-router",
"path": "../node_modules/aurelia-templating-router/dist/amd",
"main": "aurelia-templating-router"
},
{
"name": "aurelia-knockout",
"path": "../node_modules/aurelia-knockout/dist/amd",
"main": "aurelia-knockout"
},
{
"name": "knockout",
"path": "../node_modules/knockout/build/output",
"main": "knockout-latest"
},
{
"name": "knockout-secure-binding",
"path": "../node_modules/knockout-secure-binding/dist",
"main": "knockout-secure-binding.min"
},
{
"name": "aurelia-testing",
"path": "../node_modules/aurelia-testing/dist/amd",
"main": "aurelia-testing",
"env": "dev"
}
]
Я знаю, что я должен использовать следующий код (как я сделал в моем старом приложении Дюрандаль), чтобы активировать нокаут безопасных привязок:
var options = {
attribute: "data-bind", // default "data-sbind"
globals: window, // default {}
bindings: ko.bindingHandlers, // default ko.bindingHandlers
noVirtualElements: false // default true
};
ko.bindingProvider.instance = new ko.secureBindingsProvider(options);
, но я не знаю, как использовать его в этом новом Aure lia app, или вообще как сделать плагин aurelia-knockout использовать безопасную привязную версию нокаута. Я попытался изменения моего main.js файл, как это:
export function configure(aurelia) {
var options = {
attribute: "data-bind", // default "data-sbind"
globals: window, // default {}
bindings: ko.bindingHandlers, // default ko.bindingHandlers
noVirtualElements: false // default true
};
ko.bindingProvider.instance = new ko.secureBindingsProvider(options);
aurelia.use
.standardConfiguration()
.developmentLogging()
.plugin('aurelia-knockout');
return aurelia.start().then(() => aurelia.setRoot());
}
или даже настройки Аурелия-knockout.js файла в модуле NPM, вставив безопасное связывающее определение непосредственно перед этой линией
ko.applyBindings(executionContext, this.element);
, но даже если у меня нет ошибок сборки (я использую команду «au build»), ни одно из вышеописанных действий не было выполнено.
ОБНОВЛЕНИЕ
Я вставил ко безопасного связывания код инициализации непосредственно внутри
node_modules\aurelia-knockout\dist\amd\aurelia-knockout-custom-attribute.js
и я добавил ссылку на защищенный модуль связывания в 1-й линии, как так
define(['exports', 'aurelia-dependency-injection', 'aurelia-templating', 'knockout-secure-binding'], function (exports, _aureliaDependencyInjection, _aureliaTemplating, _knockoutSecureBinding) {
и теперь я получаю эту ошибку:
Unhandled rejection TypeError: ko.secureBindingsProvider is not a constructor
как если бы защищенный модуль привязки не был обнаружен/загружен.
В любом случае, я не думаю, что волнение вокруг «построенной» версии node_module является идеальным решением, я просто ищу способ заставить его работать. Все еще с нетерпением жду лучших предложений.