在节点中运行我的文件,终端在意外令牌"("附近抛出错误语法错误



我正在尝试在Macbook上的节点环境中运行文件。我不断收到以下终端错误消息:

/.../filename.js: line 2: syntax error near unexpected token `('
/.../filename.js: line 2: `const fs = require('../build/index.js');'

法典:

#!/usr/bin/env node
const fs = require('../build/index.js');

我给出的命令是:

node index.js

(我知道文件名相同,但它调用的是不同的文件。

我似乎无法弄清楚为什么它会找到额外的'.

我试过:

  • 多次重写代码。
  • 我从头开始创建一个具有相同名称(文件名.js)的新文件。
  • 通过 jslint 运行代码
  • https://www.digitalocean.com/community/questions/syntax-error-near-unexpected-token-in-node-js-for-http
  • 我遵循了本文中的确切格式:https://adrianmejia.com/blog/2016/08/12/getting-started-with-node-js-modules-require-exports-imports-npm-and-beyond/
  • 使用双引号代替单引号

更多的背景,这是我拿起的一个项目,这是我第一次尝试运行它。

编辑:索引代码.js

'use strict';
var _child_process = require('child_process');
var _logger = require('./logger');
var _logger2 = _interopRequireDefault(_logger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var l = new _logger2.default();
l.log('Starting backup');
var wd = __dirname.split('/');
var basePath = wd.slice(0, wd.length - 1).join('/');
var execPath = basePath + '/path/filename.js';
var stdout = (0, _child_process.execSync)('. ' + execPath + ' -a ' + basePath + '/something.json -b ' + basePath + '/backups');
l.log(stdout);

问题是index.js通过child_process.execSync()方法调用filename.js,这基本上是"使用 shell 执行此文件并给我它的输出"。

您的filename.js有一个 shebang,如果不是因为第一个参数中的这个小点execSync()它会按预期(使用 node 运行)。它看起来像这样:

. /some/path/filename.js -a /some/path/something.json -b /some/path/backups

sh-shells 中,.是内置命令source简写,意思是">在 shell 中执行此文件并返回其退出代码"。因此,filename.js在 shell 中执行,而不是在节点中执行。

只需删除此点(后面有空格),它就会起作用。

最新更新