Я тестирую группу компонентов React JSX. Все они должны быть переделаны с помощью React или Babel или что-то еще, но у нас есть особые потребности в требованиях на stubbing, поэтому я пытаюсь переопределить требования со специальным компилятором, который запускается с Mocha. Решение ниже работает хорошо, но вы заметите, что мы используем require.extensions [] для захвата всех файлов .jsx. Меня беспокоит, что require.extensions заблокировано и устарело. Есть ли лучший способ сделать это?Лучший способ require.extensions с Node.js
// Install the compiler.
require.extensions['.jsx'] = function(module, filename) {
return module._compile(transform(filename), filename);
};
Вот вся transpiler для справки:
// Based on https://github.com/Khan/react-components/blob/master/test/compiler.js
var fs = require('fs'),
ReactTools = require('react-tools');
// A module that exports a single, stubbed-out React Component.
var reactStub = 'module.exports = require("react").createClass({render:function(){return null;}});';
// Should this file be stubbed out for testing?
function shouldStub(filename) {
if (!global.reactModulesToStub) return false;
// Check if the file name ends with any stub path.
var stubs = global.reactModulesToStub;
for (var i = 0; i < stubs.length; i++) {
if (filename.substr(-stubs[i].length) == stubs[i]) {
console.log('should stub', filename);
return true;
}
}
return false;
}
// Transform a file via JSX/Harmony or stubbing.
function transform(filename) {
if (shouldStub(filename)) {
delete require.cache[filename];
return reactStub;
} else {
var content = fs.readFileSync(filename, 'utf8');
return ReactTools.transform(content, {harmony: true});
}
}
// Install the compiler.
require.extensions['.jsx'] = function(module, filename) {
return module._compile(transform(filename), filename);
};
И некоторые ссылки simalar решения ...
- https://github.com/danvk/mocha-react/issues/1
- https://github.com/Automattic/jsx-require-extension
- https://www.npmjs.com/package/node-jsx
- https://github.com/olalonde/better-require
- http://mochajs.org/#usage
- http://nodejs.org/api/globals.html#globals_require_extensions
Решения может быть раздвоенным здесь: https://github.com/danvk/mocha-react
В продолжение нашей дискуссии о github см. Эту тему относительно этой точной проблемы. Https://groups.google.com/forum/#!searchin/nodejs/require.extensions/nodejs/QsOEWvptQpA/G6xYTm52N60J. Я понимаю, что нет другой альтернативы, если вы хотите загрузить переданные js прямо в линию, как вы уже выше. Надеюсь, я буду исправлен хотя :) –
Из документов: «Поскольку система модулей заблокирована, эта функция, вероятно, никогда не исчезнет». Кроме того, вышеуказанная ссылка на документацию больше не действительна. Вы можете заменить его https://nodejs.org/api/modules.html#modules_require_extensions. –