Можно ли включить EnmaScript 6 Harmony Proxies в nodejs? Если да, то какие плюсы и минусы? И есть ли какая-либо документация о том, как их использовать? Спасибо!
Включить прокси-серверы в узлах
Ответ 1
Вызов node с помощью node --harmony-proxies
должен сделать трюк.
Плюсы: прокси-серверы - очень мощная функция, когда они вам действительно нужны.
Минусы: прокси-серверы - слишком мощная функция, когда они вам не нужны (что должно быть в большинстве случаев). Кроме того, реализация должна по-прежнему считаться экспериментальной.
Что касается документации, все, что на самом деле является atm, это виртуализация Harmony, в частности эта страница, которая отражает текущую реализацию прокси в V8 (и, следовательно, node):
Ответ 2
Я рекомендую harmony-reflect, что облегчает, например, настроить get/set ловушки:
ОБНОВЛЕНИЕ осторожно, ниже - CoffeeScript
require 'harmony-reflect'
handler =
get: ( target, name ) ->
console.log 'get' name
return target[ name ]
set: ( target, name, value ) ->
console.log 'set' name
target[ '%is-clean' ] = no if value isnt target[ name ]
if value is undefined then delete target[ name ]
else target[ name ] = value
return value
clean = ( x ) ->
x[ '%is-clean' ] = yes
return x
p = Proxy {}, handler
p[ 'a' ] = 1
p[ 'b' ] = undefined
console.log p[ 'a' ], p[ 'b' ]
console.log "c" of p, p[ 'c' ]
console.log p
clean p
p[ 'a' ] = 1
console.log p
p[ 'a' ] = 42
console.log p
приведенный выше код является проницательным для выполнения "прозрачного сохранения объекта" в JavaScript. используя harmony-reflect
, становится тривиальным, чтобы сделать так, чтобы все действия get
и set
на объекте были перехвачены - в этой демонстрации мы устанавливаем атрибут %is-clean
, чтобы мы могли проверить, были ли изменены члены объекта, и мы также удаляем элементы, которые были установлены в undefined.
Ответ 3
Вы можете использовать pimped-proxy, который облегчает реализацию прокси, упрощая декларирование и совместимость с ES5. В отличие от родного прокси, он может определять только свойства прокси во время создания.
Ответ 4
Proxy
теперь доступен изначально в версиях Node > 6.
Ответ 5
Прокси-серверы Harmony не будут работать так хорошо для nodejs, потому что они эффективно выполняют синхронные вызовы функций типа. То есть вы не можете реализовать прокси-метод, который асинхронно.
См. этот репозиторий GitHub для примеров: https://github.com/mschwartz/SilkJS-Harmony