Да, это возможно, используйте эту ветку (на основе 0.8.18), и любой код js, который вы поместите в 'deps / v8 / src / extra-snapshot.js', будет опережать время скомпилировано в машинный код и встроено в v8 как часть обычной инициализации встроенного объекта. Вам нужно будет собрать nodejs для каждой платформы, на которой вы собираетесь развернуть свой продукт.
Снимок кода выполняется очень рано при инициализации v8, и вы не можете получить доступ к встроенным объектам в «теле модуля». Что вы можете сделать, так это поместить весь свой код в глобальную функцию инициализации, которая будет вызвана позже. Пример:
// 'this' points to the same as the object referenced by
// 'global' in normal nodejs code.
// at this point it has nothing defined in it, so in order to use
// global objects a reference to it is needed.
var global = this;
global.initialize = function() {
// You have to define all global objects you use in your code here;
var Array = global.Array;
var RegExp = global.RegExp;
var Date = global.Date;
// See ECMAScript v5 standard global objects for more
// Also define nodejs global objects:
var console = global.console;
var process = global.process;
// Your code goes embedded here
};
Кроме того, это предполагает, что весь ваш код определен в одном файле, поэтому, если ваш проект использует модульную систему nodejs (требуется), вам нужно написать скрипт, который объединит все ваши файлы в один и обернет каждый файл в замыкание, которое обманом заставит ваш код думать, что это обычный модуль nodejs. Вероятно, закрытие каждого модуля предоставит функцию require, и эта функция должна будет решить, когда делегировать стандартному «global.require» или вернуть экспорт из ваших других встроенных модулей. Посмотрите, как системы модулей javascript реализованы для идей (хороший пример - requirejs).
Это затруднит отладку вашего кода, поскольку вы не увидите трассировки стека для нативного кода.
UPDATE:
Даже при использовании снимков v8 код внедряется в двоичный файл node.js, поскольку v8 предпочитает отложенную компиляцию. См. это для получения дополнительной информации.