Yeoman for Angular,然后“grunt serve”将无法启动

Posted

技术标签:

【中文标题】Yeoman for Angular,然后“grunt serve”将无法启动【英文标题】:Yeoman for Angular, then "grunt serve" won't start 【发布时间】:2013-12-09 16:26:28 【问题描述】:

这是我第一次使用 yeoman 为 AngularJS 应用设置脚手架,我不得不承认我可能是 nodeJS、grunt 和 bower 世界的新手。

所以,这是我到目前为止所做的:

我确保安装了 yeoman、grunt-cli 和 angular-generator 软件包

npm install -g yo grunt-cli bower
npm install -g generator-angular

生成了我的应用

yo angular

我也试过了:

yo angular --min-safe

到目前为止,al 似乎还不错。在给定的选项之间,我选择 Twitter Bootstrap 之一,没有角度依赖,并覆盖我的本地 .gitignore 文件。

毕竟,我尝试运行我的应用程序:

grunt serve

此时,grunt 抱怨它没有本地安装到项目中,所以我运行:

npm install grunt --save-dev

再次不,尝试运行应用程序:

grunt serve

这就是我被阻止的地方:

C:\Projects\what-now>grunt serve
Running "serve" task

Running "clean:server" (clean) task

Running "concurrent:server" (concurrent) task

Running "copy:styles" (copy) task

Done, without errors.
    Warning:
    C:\Projects\what-now\node_modules\grunt-contrib-compass\node_modules\tmp\lib\tmp.js:261
      throw err;
            ^
    TypeError: Cannot read property 'stdout' of undefined
        at compile (C:\Projects\what-now\node_modules\grunt-contrib-compass\tasks\compass.js:37:10)
        at C:\Projects\what-now\node_modules\grunt-contrib-compass\tasks\compass.js:68:7
        at C:\Projects\what-now\node_modules\grunt-contrib-compass\tasks\lib\compass.js:121:11
        at _fileCreated (C:\Projects\what-now\node_modules\grunt-contrib-compass\node_modules\tmp\lib\tmp.js:172:7)
        at C:\Projects\what-now\node_modules\grunt-google-cdn\node_modules\bower\node_modules\rimraf\node_modules\graceful-fs\graceful-fs.js:53:5
        at C:\Projects\what-now\node_modules\grunt-google-cdn\node_modules\bower\node_modules\rimraf\node_modules\graceful-fs\graceful-fs.js:62:5
        at OpenReq.Req.done (C:\Projects\what-now\node_modules\grunt-google-cdn\node_modules\bower\node_modules\fstream\node_modules\graceful-fs\graceful-fs.js:142:5)
        at OpenReq.done (C:\Projects\what-now\node_modules\grunt-google-cdn\node_modules\bower\node_modules\fstream\node_modules\graceful-fs\graceful-fs.js:64:22)
        //... stack trace continues ...

查看在 compass 的 compile 方法中爆炸的代码,我发现如下:

child.stdout.pipe(process.stdout);

这让我觉得child 出于某种原因未定义,而这个变量来自对grunt.util.spawn 的调用。这是我不知所措的地方。

我是否缺少任何依赖项?我是否缺少任何配置?

信息:

操作系统:Windows 8 x64 节点:v0.10.22

【问题讨论】:

我很高兴您将错误的全文放入您的问题中。在我巧妙地决定破坏我的 ruby​​ 配置后,为我省去了很多麻烦。 【参考方案1】:

对 Ember 执行相同的程序,运行 grunt。收到错误“TypeError:无法读取未定义的属性‘stdout’。” gem install compass (ruby 已经安装在我的 Windows 7 64 位上),即使 compass 应该更早安装并且这有效。跑咕噜咕噜发球没有问题。

【讨论】:

【参考方案2】:

*叹气*,对不起。

我只需要写下这个问题,然后弄清楚我需要安装 Ruby 和 compass gem。现在它是有道理的:编译过程不会产生。

安装 Ruby 后,运行:

gem install compass

你应该很高兴。

编辑: 安装 Ruby 后,您需要确保将 ruby​​ 运行时文件的路径添加到 PATH 变量中。 (感谢 JagWire!)

【讨论】:

我还要说您需要将 ruby​​ 安装的 bin 文件夹路径附加到全局路径环境变量中。 只有我一个人,还是有人想知道为什么我需要安装 ruby​​ 才能使用 yeoman 来设置 Angular 或 ember 项目? @fool4jesus 这是因为 Compass 是用 Ruby 编写的。如果一切都用 nodejs 运行就好了。我只是希望有一个更有用的错误消息! @ScottCornwell 是的,我认为是这样。看起来很奇怪-正如您所说,错误消息肯定可以与改进有关。 :-) @JossefHarush 最初的问题是关于 Windows 环境的上下文,它只是关于下载和执行安装程序——你认为指定如何安装 ruby​​ 是否有用,因为有几种方法可以去关于它?【参考方案3】:

在 windows 上我安装了一些 ruby​​:

    C:\ruby187

    C:\Ruby200-x64

在两个地方安装指南针,使用:

    gem install compass

这解决了我在 Windows 8 64 位上的问题

【讨论】:

以上是关于Yeoman for Angular,然后“grunt serve”将无法启动的主要内容,如果未能解决你的问题,请参考以下文章

我应该为新的 Angular 应用程序使用 angular-seed 还是 yeoman?

Yeoman 构建的 Angular 应用程序未将引导字体部署到 Heroku

如何部署 yeoman angular-fullstack 项目?

npm / yeoman 在没有 sudo 的情况下安装 generator-angular

Yeoman Angular.js grunt serve-d 应用程序从 livereload.js?snipver=1 延迟很长

利用yeoman快速搭建React+webpack+es6脚手架