Можно ли защитить js код от постороннего вмешательства?
Angular 2 прекрасно защищает код, компилируя логику и стили в скомпонованные сжатые файлы.
Простой браузерный JS можно таким же путём сжимать, усложняя жизнь чужакам.
Есть ли подобное решение для Node.js?
Dark Hole: спасибо, но до этого я бы и сам додумался)
Я говорю о сжатии node.js - это не тоже самое, что браузерный js и пока что готовое решение не нашёл.
Dark Hole: вы работали с node.js? Там система модулей: нельзя просто так взять и слепить все файлы в один - так они будут пытаться вызывать несуществующие модули. Нужна умная замена require и module.exports
Вообще browserify создавался, чтобы node.js код можно было использовать в браузере.
Параметр --node отключает замену встроенных модулей node.js, изменение путей модулей и добавление глобальных переменных process, Buffer и global. Всё это предоставляет node.
В принципе можно --exclude не использовать, тогда и из node_modules код будет в сборку включен, тогда и без npm install в другом месте будет работать. Но тут возможны ошибки и проблемы, например в случае динамического подключения модулей - как express подключает view engine на основании расширения файла.
Виталий: если не нужно в один файл собирать, то можно просто сделать babel src --presets babili --out-dir build
Но так имена в верхней области видимости сокращаться не будут.
Aves: как раз наоборот - нужно все файлы в проекте, включая папку node_modules слепить в один файл и сжать. Про шифрование не уверен, как раз из-за динамического включения модулей и сериализации объектов, тормозить скрипт лишними расшифровками в реалтайме тоже не хочется. Но в идеале чем больше шифра без накладных расходов, тем лучше.
Виталий: ну предоставление значений этих переменных всё-таки только для браузера нужно. Сборка для node.js из-за этого скорее всего из другой папки работать будет неправильно. Лучше добавить параметр --detect-globals false