Gulp:在子文件夹中运行命令

时间:2018-01-14 07:20:40

标签: gulp npm-install

我试图运行" npm install"使用 gulp版本3.9.1 在子文件夹中的shell命令。目标是从源代码编译引导程序。我已经在Excute command in gulp for sub folder处找到了示例,但我仍然会在ENOENT"错误。

此外, NPM版本为2.15.9

var spawn = require('child_process').spawn;

// complie boostrap
gulp.task('compile-boostrap', function(done) {
    spawn('npm', ['install'], { cwd: 'src/bootstrap/', stdio: 'inherit' })
    .on('close', done);
});

gulp.task('default', [ 'compile-boostrap']); 

我收到以下错误消息。

$ gulp
[02:12:43] Using gulpfile c:\Users\jacky\web-ui\gulpfile.js
[02:12:43] Starting 'compile-boostrap'...
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: spawn npm ENOENT
    at exports._errnoException (util.js:907:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
    at onErrorNT (internal/child_process.js:344:16)
    at nextTickCallbackWith2Args (node.js:442:9)
    at process._tickCallback (node.js:356:17)
    at Function.Module.runMain (module.js:443:11)
    at startup (node.js:139:18)
    at node.js:974:3

下面是我的fs树。

C:\USERS\ME\WEB-UI\SRC
├───bootstrap
│   ├───.github
│   ├───assets
│   │   ├───brand
│   │   ├───css
│   │   ├───img
│   │   │   └───favicons
│   │   ├───js
│   │   │   ├───src
│   │   │   └───vendor
│   │   └───scss
│   ├───build
│   ├───dist
│   │   ├───css
│   │   └───js
│   ├───docs
│   │   └───4.0
│   │       ├───about
│   │       ├───components
│   │       ├───content
│   │       ├───examples
│   │       │   ├───album
│   │       │   ├───blog
│   │       │   ├───carousel
│   │       │   ├───cover
│   │       │   ├───dashboard
│   │       │   ├───grid
│   │       │   ├───jumbotron
│   │       │   ├───justified-nav
│   │       │   ├───narrow-jumbotron
│   │       │   ├───navbar-bottom
│   │       │   ├───navbar-top
│   │       │   ├───navbar-top-fixed
│   │       │   ├───navbars
│   │       │   ├───offcanvas
│   │       │   ├───screenshots
│   │       │   ├───signin
│   │       │   ├───starter-template
│   │       │   ├───sticky-footer
│   │       │   ├───sticky-footer-navbar
│   │       │   └───tooltip-viewport
│   │       ├───extend
│   │       ├───getting-started
│   │       ├───layout
│   │       └───utilities
│   ├───js
│   │   ├───src
│   │   └───tests
│   │       ├───unit
│   │       ├───vendor
│   │       └───visual
│   ├───nuget
│   ├───scss
│   │   ├───mixins
│   │   └───utilities
│   ├───_data
│   ├───_includes
│   │   └───icons
│   ├───_layouts
│   └───_plugins
├───bower_components
│   ├───jquery
│   │   ├───dist
│   │   ├───external
│   │   │   └───sizzle
│   │   │       └───dist
│   │   └───src
│   │       ├───ajax
│   │       │   └───var
│   │       ├───attributes
│   │       ├───core
│   │       │   └───var
│   │       ├───css
│   │       │   └───var
│   │       ├───data
│   │       │   └───var
│   │       ├───deferred
│   │       ├───effects
│   │       ├───event
│   │       ├───exports
│   │       ├───manipulation
│   │       │   └───var
│   │       ├───queue
│   │       ├───traversing
│   │       │   └───var
│   │       └───var
│   ├───typeahead.js
│   │   ├───dist
│   │   ├───doc
│   │   │   └───migration
│   │   ├───src
│   │   │   ├───bloodhound
│   │   │   ├───common
│   │   │   └───typeahead
│   │   └───test
│   │       ├───bloodhound
│   │       ├───fixtures
│   │       ├───helpers
│   │       ├───integration
│   │       └───typeahead
│   └───typeahead.js-bootstrap4-css
├───css
├───images
│   └───Entypo+
│       ├───Entypo+
│       └───Entypo+ Social Extension
└───includes

1 个答案:

答案 0 :(得分:0)

如果您将shell参数设置为true

,则此功能正常
gulp.task('compile-boostrap', function(done) {
    spawn('npm', ['install'], { cwd: 'src/bootstrap/', stdio: 'inherit', shell: true })
    .on('close', done);
});

那是因为Windows要求终端运行npm。在官方documentation中对此进行了解释。