#node.js #visual-studio-2015 #npm #babeljs
#node.js #visual-studio-2015 #npm #babeljs
Вопрос:
Я работаю над переносом приложения ReactJS на установку .NET. Я пытаюсь запустить скрипт NPM из запуска задачи (или где-либо в VS.). Когда я запускаю свою команду сборки из запуска задачи, она завершается сбоем из-за функции ES6 arrow в одном из моих сценариев. Однако, если я загружаю cmd.exe
или powershell, перехожу к проекту и запускаю его вручную, он работает отлично.
Есть идеи, почему Visual Studio будет это делать?
Результат выглядит примерно так:
> cmd.exe /c npm run build --color=always
> ...cmd1
> ...cmd2
> mocha --reporter spec tools/testSetup.js "Scripts/app/**/*.test.js"
C:CodeHALdevTestHALTestHALReacttoolstestSetup.js:40
Object.keys(document.defaultView).forEach((property) => {
^
SyntaxError: Unexpected token >
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at C:CodeHALdevTestHALTestHALReactnode_modulesmochalibmocha.js:220:27
at Array.forEach (native)
at Mocha.loadFiles (C:CodeHALdevTestHALTestHALReactnode_modulesmochalibmocha.js:217:14)
at Mocha.run (C:CodeHALdevTestHALTestHALReactnode_modulesmochalibmocha.js:469:10)
at Object.<anonymous> (C:CodeHALdevTestHALTestHALReactnode_modulesmochabin_mocha:404:18)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
Файл, в котором он выдает ошибку, в основном просто устанавливает JSDOM:
process.env.NODE_ENV = 'test';
// Register babel so that it will transpile ES6 to ES5
// before our tests run.
require('babel-register')();
// Disable webpack-specific features for tests since
// Mocha doesn't know what to do with them.
require.extensions['.css'] = function () {return null;};
require.extensions['.png'] = function () {return null;};
require.extensions['.jpg'] = function () {return null;};
// Configure JSDOM and set global variables
// to simulate a browser environment for tests.
var jsdom = require('jsdom').jsdom;
var exposedProperties = ['window', 'navigator', 'document'];
global.document = jsdom('');
global.window = document.defaultView;
Object.keys(document.defaultView).forEach((property) => {
if (typeof global[property] === 'undefined') {
exposedProperties.push(property);
global[property] = document.defaultView[property];
}
});
global.navigator = {
userAgent: 'node.js'
};
documentRef = document; //eslint-disable-line no-undef
Опять же, я могу запустить это из командной строки напрямую, и это сработает. Вызывается babel-register. Я просто не уверен, почему здесь возникает ошибка. Если я заменяю функцию стрелки обычной функцией, я получаю другие ошибки в своих тестах, так что это похоже на то, что программа запуска задач не может найти babel или теряет некоторые настройки среды.
Комментарии:
1. Вы когда-нибудь решали эту проблему? Я сталкиваюсь с той же проблемой и вынужден использовать gulp без необходимости: (
2. Я этого не сделал. Я в значительной степени полностью отказался от VS.
3. Ох… это прискорбно. Тем не менее, спасибо за ответ.