【问题标题】:Gulp Error: spawn EACCESGulp 错误:产生 EACCES
【发布时间】:2015-06-23 14:38:53
【问题描述】:

gulpfile.js

'use strict';

var gulp = require('gulp');

gulp.paths = {
  src: 'src',
  dist: 'dist',
  tmp: '.tmp',
  e2e: 'e2e'
};

require('require-dir')('./gulp');

gulp.task('build', ['clean'], function () {
    gulp.start('buildapp');
});

gulp/server.js

'use strict';

var gulp = require('gulp');

var paths = gulp.paths;

var util = require('util');

var browserSync = require('browser-sync');

var middleware = require('./proxy');

function browserSyncInit(baseDir, files, browser) {
  browser = browser === undefined ? 'default' : browser;

  var routes = null;
  if(baseDir === paths.src || (util.isArray(baseDir) && baseDir.indexOf(paths.src) !== -1)) {
    routes = {
      '/bower_components': 'bower_components'
    };
  }

  browserSync.instance = browserSync.init(files, {
    startPath: '/',
    server: {
      baseDir: baseDir,
      middleware: middleware,
      routes: routes
    },
    browser: browser
  });
}

gulp.task('serve', ['watch'], function () {
  browserSyncInit([
    paths.tmp + '/serve',
    paths.src,
  ], [
    paths.tmp + '/serve/{app,components}/**/*.css',
    paths.src + '/{app,components}/**/*.js',
    paths.src + 'src/assets/images/**/*',
    paths.tmp + '/serve/*.html',
    paths.tmp + '/serve/{app,components}/**/*.html',
    paths.src + '/{app,components}/**/*.html'
  ]);
});

gulp.task('serve:dist', ['buildapp'], function () {
  browserSyncInit(paths.dist);
});

gulp.task('serve:e2e', ['inject'], function () {
  browserSyncInit([paths.tmp + '/serve', paths.src], null, []);
});

gulp.task('serve:e2e-dist', ['buildapp'], function () {
  browserSyncInit(paths.dist, null, []);
});

节点版本v0.10.25
npm 版本1.3.10
gulp CLI 和本地版本:@987654325 @
操作系统Ubuntu 14.04.2 LTS

我也正确安装了所有节点包,没有错误。但如果我运行gulp serve
我会得到Error: spawn EACCES

我清楚地卸载了 nodenpmbowergulp 等,并已将它们重新安装,但它没有解决问题。

这是我运行 gulp serve 时的整个错误日志:

[22:15:33] Using gulpfile /media/culaste/Data/Code/sampleapp/source/gulpfile.js
[22:15:33] Starting 'styles'...
[22:15:34] gulp-inject 26 files into app.scss.
[22:15:34] Finished 'styles' after 1.24 s
[22:15:34] Starting 'inject'...
[22:15:34] gulp-inject 1 files into 404.tmpl.html.
[22:15:34] gulp-inject 1 files into 500.tmpl.html.
[22:15:35] gulp-inject 1 files into index.html.
[22:15:35] gulp-inject 105 files into 404.tmpl.html.
[22:15:35] gulp-inject 105 files into 500.tmpl.html.
[22:15:35] gulp-inject 105 files into index.html.
[22:15:35] Finished 'inject' after 668 ms
[22:15:35] Starting 'watch'...
[22:15:36] Finished 'watch' after 1.19 s
[22:15:36] Starting 'serve'...
[22:15:36] Finished 'serve' after 94 ms
[BS] Local URL: http://localhost:3000/
[BS] External URL: http://192.168.8.101:3000/
[BS] Serving files from: .tmp/serve
[BS] Serving files from: src
[BS] Watching files...

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn EACCES
    at errnoException (child_process.js:988:11)
    at Process.ChildProcess._handle.onexit (child_process.js:779:34)

【问题讨论】:

  • 这与您使用的端口有关,而不是 gulp 本身。
  • 感谢您的帮助。但你是什么意思?端口不是免费的吗?它被另一个程序或其他东西使用?如果是,我该如何释放它或更改端口?或者如果我错了,你能告诉我你认为我应该怎么做吗?
  • gulp serve 是做什么的?这里好像没有定义。
  • 是的,端口可能正在使用中,或者您没有运行节点的权限。尝试使用sudo 运行它
  • @ExplosionPills 这是我的 server.js 文件:gulp.task('serve', ['watch'], function () { browserSyncInit([ paths.tmp + '/serve', paths.src ], [ paths.tmp + '/serve/{app,components}/**/*.css', paths.src + '/{app,components}/**/*.js', paths.src + 'src/assets/images/**/*', paths.tmp + '/serve/*.html', paths.tmp + '/serve/{app,components}/**/*.html', paths.src + '/{app,components}/**/*.html' ]); });

标签: angularjs node.js npm gulp yo


【解决方案1】:

问题是当 browserSync 尝试打开我的浏览器时,由于权限问题而引发错误。添加open: false 即可解决问题。

gulp/server.js

browserSync.instance = browserSync.init(files, {
    startPath: '/',
    open:false,
    server: {
      baseDir: baseDir,
      middleware: middleware,
      routes: routes
    },
    browser: browser
  });

我知道现在还没有必要修复权限问题,但我认为如果您运行开发服务器时,它会自动为您打开浏览器(如果浏览器已经打开,则为新标签页)可能会很好。非常感谢任何建议和/或解决方案。谢谢大家。

【讨论】:

    【解决方案2】:

    我在 ubuntu 上运行时遇到了同样的问题,尽管在 windows 上一切正常,在 browsersync 初始化中设置 open:false 解决了这个问题。

    browserSync.instance = browserSync.init(files, {
        startPath: '/',
        open:false,
        server: {
          baseDir: baseDir,
          middleware: middleware,
          routes: routes
        },
        browser: browser
      });
    

    【讨论】:

      【解决方案3】:

      您的项目在哪个文件夹中? 由于我的应用程序安装在 /opt 下,我遇到了 EACCES 错误

      您是否尝试过使用命令 node server.js 运行服务器?

      【讨论】:

      • 什么意思?顺便说一句,我尝试在另一台机器(我的笔记本电脑)上运行我的应用程序,它就像一个魅力。我不知道我的桌面上的开发环境有什么问题。你有什么线索吗? node 或 npm 或权限方面是否有任何配置? @SeeDart
      • 根据您机器的权限,您可能需要使用 sudo 在某些文件夹中运行命令。 Exa:在我的工作中对 VM 进行开发时,我没有管理员权限,我无法将 MEAN 堆栈存储在 /opt 下。传统上用于可选软件。所以我在尝试将 sudo 与 gulp 一起使用时遇到了问题(它会抱怨它不需要管理员访问权限,所以你不应该使用 sudo 运行它)。也可能是端口问题。 node server.js 只是指使用 node 来启动你的服务器而不是 gulp。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2016-09-09
      • 2017-09-27
      • 2016-04-30
      • 1970-01-01
      • 2016-01-26
      相关资源
      最近更新 更多