2013-02-26 7 views
0

У меня есть файл nodejs runner.node.js.Проблемы с сценарием NPM

Если я бегу node runner.node.js это работает

Но если я пытаюсь запустить ту его с помощью теста НПМ (он упоминается в package.json):

"test": "node ./spec/runner.node.js" 

или

"test": "spec/runner.node.js" 

Это говорит что файл не является выполнимым:

sh: 1: spec/runner.node.js: Permission denied 
npm ERR! Test failed. See above for more details. 
npm ERR! not ok code 0 

Если я устанавливаю файл как исполняемый тогда говорит:

spec/runner.node.js: 1: spec/runner.node.js: Syntax error: word unexpected (expecting ")") 
npm ERR! Test failed. See above for more details. 
npm ERR! not ok code 0 

в то время как он все еще работает правильно с «узлом спецификации/runner.node.js»

Файл это:

console.log("Running Knockout tests in Node.js"); 

var fs = require('fs'); 
var jasmine = require('./lib/jasmine-1.2.0/jasmine'); 

// export jasmine globals 
for (var key in jasmine) { 
    global[key] = jasmine[key]; 
} 

// add our jasmine extensions to the exported globals 
require('./lib/jasmine.extensions'); 

// export ko globals 
if (process.argv.length > 2 && process.argv[2] == '--source') { 
    // equivalent of ../build/knockout-raw.js 
    global.DEBUG = true; 
    global.ko = global.koExports = {}; 
    global.knockoutDebugCallback = function(sources) { 
     sources.unshift('build/fragments/extern-pre.js'); 
     sources.push('build/fragments/extern-post.js'); 
     eval(sources.reduce(function(all, source) { 
      return all + '\n' + fs.readFileSync(source); 
     }, '')); 
    }; 
    require('../build/fragments/source-references'); 
} else { 
    global.ko = require('../build/output/knockout-latest.js'); 
} 

// reference behaviors that should work out of browser 
require('./arrayEditDetectionBehaviors'); 
require('./asyncBehaviors'); 
require('./dependentObservableBehaviors'); 
require('./expressionRewritingBehaviors'); 
require('./extenderBehaviors'); 
require('./mappingHelperBehaviors'); 
require('./observableArrayBehaviors'); 
require('./observableBehaviors'); 
require('./subscribableBehaviors'); 

// get reference to jasmine runtime 
var env = jasmine.jasmine.getEnv(); 

// create reporter to return results 
function failureFilter(item) { 
    return !item.passed(); 
} 
env.addReporter({ 
    reportRunnerResults:function (runner) { 
     var results = runner.results(); 
     runner.suites().map(function (suite) { 
      // hack around suite results not having a description 
      var suiteResults = suite.results(); 
      suiteResults.description = suite.description; 
      return suiteResults; 
     }).filter(failureFilter).forEach(function (suite) { 
      console.error(suite.description); 
      suite.getItems().filter(failureFilter).forEach(function (spec) { 
       console.error('\t' + spec.description); 
       spec.getItems().filter(failureFilter).forEach(function (expectation) { 
        console.error('\t\t' + expectation.message); 
       }); 
      }); 
     }); 
     console.log("Total:" + results.totalCount + " Passed:" + results.passedCount + " Failed:" + results.failedCount); 
     process.exit(results.failedCount); 
    } 
}); 

// good to go 
env.execute(); 

ответ

2

Добавить

#/usr/bin/env node 

в качестве первой строки в файле. Таким образом, при запуске в качестве исполняемого файла ваша ОС будет знать, что он должен использовать Node.js для его запуска (точно: ваша ОС будет знать, что она должна использовать первое приложение под названием node для выполнения вашего скрипта).

Смежные вопросы