Я просто хочу включить JS файл, но не оценивать его в глобальной области.
Я просмотрел labjs и requirejs, и хотя они могут делать 1000 других вещей, похоже, что они не могут решить эту проблему.
Мне известно, что я могу обернуть код foo.js
таким образом, чтобы он ожидал определенный контекст и мог действовать внутри, но это не то, что я ищу (нужно изменить исходные файлы). Скорее, я хотел бы, чтобы исходные JS файлы оставались как любой другой JS файл, который не нуждается в каких-либо метаданных или каком-либо разрешении контекста исполнения во время выполнения через код во включенном файле; вне включенного файла, это нормально.
Некоторые простые демонстрации для ясности:
/*
* Example 1 - apply to current context
*/
function x() {
include('foo.js'); // provides foo()
foo(); // ok!
}
foo(); // not ok!
/*
* Example 2 - apply to namespace context
*/
include.apply(ns, ['foo.js']); // provides foo()
ns.foo(); // ok!
foo(); // not ok!
Я знаю, что это может быть достигнуто с помощью eval()
или путем создания new Function
со строкой, но я надеюсь, что есть лучшее решение.