简体   繁体   English

NPM脚本问题

[英]NPM script problems

I have a nodejs file runner.node.js . 我有一个nodejs文件runner.node.js

If I run node runner.node.js it works 如果我运行node runner.node.js它的工作原理

But if I try tu run it with npm test (it's referenced in package.json): 但是,如果我尝试用npm测试运行它(它在package.json中引用):

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

or 要么

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

It says that the file isn't executable: 它说该文件不可执行:

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

If I set the file as executable it then says: 如果我将文件设置为可执行文件,则说:

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

while it still runs correctly with "node spec/runner.node.js" 虽然它仍然可以使用“node spec / runner.node.js”正确运行

The file is this: 该文件是这样的:

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();

Add

#/usr/bin/env node

as the first line in your file. 作为文件的第一行。 This way, when run as an executable your OS will know that it shall use Node.js to run it (to be exactly: your OS will know that it shall use the first application called node to execute your script). 这样,当作为可执行文件运行时,您的操作系统将知道它将使用Node.js来运行它(确切地说:您的操作系统将知道它将使用第一个名为node应用程序来执行您的脚本)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM