Node.js – 在Windows上运行包时无法读取null的属性'toString'

我正在使用node.js上的herculehercule包来转换一些纯文本文件。 在Unix上,一切似乎都很好。 但是,有些同事在Windows上运行时遇到问题。 只有在Windows上运行时才会收到以下错误消息:

 [13:02:01] TypeError: Cannot read property 'toString' of null at Object.transcludeStringSync (D:\project\node_modules\hercule\lib\hercule.js:136:36) 

我已经用hercule@3.0.5以及hercule@2.0.5尝试上面的hercule@2.0.5 ,并且这两个包都给出了上面的错误。 但是,鉴于这只发生在Windows上,并在许多版本的软件包,我怀疑这个问题有什么应该由于Node.js安装或path

使用hercule包的代码:

 var fs = require('fs'); var path = require('path'); var gulp = require('gulp'); var drakov = require('drakov'); var hercule = require('hercule'); gulp.task('mock', ['i18n','build_minify_no_tests'], function() { var mockSpecificationTemplate= fs.readFileSync('test/mock/mock-template.apib','utf8'); var transcludedMockSpecification = hercule.transcludeStringSync(mockSpecificationTemplate, { relativePath: path.resolve('../../../') }); fs.writeFileSync('test/mock/mock.apib', transcludedMockSpecification, 'utf-8'); // Running mock server var drakovArgv = { sourceFiles: 'test/mock/mock.apib', serverPort: 9000, staticPaths: [ '../../' ], discover: true, watch: true }; drakov.run(drakovArgv); }); 

nodenpm版本信息:

 $ node -v v6.3.0 $ npm -v 3.10.3 

hercule.transcludeStringSync只运行另一个hercule进程,并向其发送输入:

 const result = childProcess.spawnSync('../bin/hercule', syncArgs, syncOptions); 

用脚本../bin/hercule

 #!/usr/bin/env node "use strict"; require('../lib/main.js'); 

…显然不适用于Windows

如果该任务必须同步,则可以使用以下函数:

 function transcludeStringSync(input, options) { const {dirname, join} = require('path') const hercule = join(dirname(require.resolve('hercule')), 'main') const args = [hercule, '--reporter', 'json-err'] for (let name in options) { args.push(`--${name}`, `--${options[name]}`) } const result = require('child_process').spawnSync('node', args, {input}) const err = result.stderr.toString() if (err) throw new Error('Could not transclude input') return result.stdout.toString() }