如何使用nodejs构建跨平台项目?
我在Windows上开发,但我的代码库建立在基于Linux的CI服务器上。它使用Grunt构建前端,并且需要几个nodejs模块。
Nodejs要求将模块本地安装到项目中,以便由grunt.task.loadNpmTasks加载。问题在于我必须从某个地方安装它们,无论是Windows还是Linux,当我从一个地方安装时,它不能在另一个地方安装。
我的项目所需的列表模块在本地安装如下:
npm install connect-livereload --production
npm install time-grunt --production
npm install load-grunt-tasks --production
npm install jshint-stylish --production
npm install load-grunt-tasks --production
npm install grunt-contrib-copy --production
npm install grunt-contrib-concat --production
npm install grunt-contrib-uglify --production
npm install grunt-contrib-compass --production
npm install grunt-contrib-jshint --production
npm install grunt-contrib-cssmin --production
npm install grunt-contrib-connect --production
npm install grunt-contrib-clean --production
npm install grunt-contrib-htmlmin --production
npm install grunt-contrib-imagemin --production
npm install grunt-contrib-watch --production
npm install grunt-rev --production
npm install grunt-usemin --production
npm install grunt-mocha --production
npm install grunt-exec --production
npm install grunt-open --production
npm install grunt-svgmin --production
npm install grunt-concurrent --production
npm install grunt-ember-templates --production
npm install grunt-replace --production
npm install grunt-neuter --production
如果我从Windows安装它,然后从Windows运行项目文件夹上的grunt
仍然可以完美运行。如果我然后检查代码到git并构建在linux框中,chmod 777并向我的用户显示,并运行相同的grunt
命令。它失败了,有很多这样的错误:
Running "mocha:all" (mocha) task
Testing: http://localhost:9000/index.html
Fatal error: spawn ENOENT
我跑了npm install
,它开始失败了另一条消息:
Running "mocha:all" (mocha) task
Testing: http://localhost:9000/index.html
/home/administrator/platform/frontend/node_modules/grunt-contrib-compass/node_modules/tmp/lib/tmp.js:261
throw err;
^
Error: spawn ENOENT
at errnoException (child_process.js:998:11)
at Process.ChildProcess._handle.onexit (child_process.js:789:34)
我所做的一切都无法发挥作用。
所以从Linux框中我从项目中删除了整个node_modules目录,然后重新运行上面的安装命令。一切都在Linux上完美运行。
然后我在Windows中将其检入git和checkout。然后我转到项目文件夹并运行grunt
,然后失败并显示:
Running "mocha:all" (mocha) task
Testing: http://localhost:9000/index.html
Running PhantomJS...ERROR
>> 'c:\Users\Edy' is not recognized as an internal or external command,
0 [ '\'c:\\Users\\Edy\' is not recognized as an internal or external command,\r',
>> 'operable program or batch file.' ]
>> operable program or batch file. 1 [ '\'c:\\Users\\Edy\' is not recognized as an internal or external command,\r',
>> 'operable program or batch file.' ]
Warning: PhantomJS exited unexpectedly with exit code 1. Use --force to continue.
卸载phantomjs并在本地安装它无济于事。全局安装也无济于事。因此,使其在Windows上运行的唯一方法似乎是删除node_modules目录并在Windows上重新安装,这让我想到了Linux上的第一个问题。
有没有办法在像我这样的跨平台环境中使用nodejs东西?我不敢相信我是第一个有这样设置的人嘿嘿
对此有任何提示或帮助表示赞赏。谢谢!
答案 0 :(得分:3)
node.js中的许多依赖项都使用本机插件。当您npm install
时,会为您的特定环境编译本机插件。
如果您在不同环境之间移动,可以npm rebuild
为新环境重建这些二进制文件。或者更冗长的方式,再次移除node_modules
文件夹和npm install
。
Fatal error: spawn ENOENT
表示正在尝试生成的进程node.js不存在。尝试生成为另一个环境编译的二进制文件时常见的情况是,它所期望的二进制文件不存在。