【问题标题】:Gulp watch /tmp permission deniedGulp watch /tmp 权限被拒绝
【发布时间】:2018-04-11 12:51:43
【问题描述】:

我在我的一个项目中使用 gulp。从操作系统(Arch Linux)运行gulp watch

fs.js:921
  return binding.readdir(pathModule.toNamespacedPath(path), options.encoding);
             ^

Error: EACCES: permission denied, scandir '/tmp/systemd-private-c33e4391b18f4b24af3055190fb15730-systemd-hostnamed.service-zrxyaX/'
at Object.fs.readdirSync (fs.js:921:18)
at Gaze._addToWatched (/home/majmun/code/wp/wp-content/plugins/project/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:274:22)
at Gaze._internalAdd (/home/majmun/code/wp/wp-content/plugins/project/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:191:10)
at /home/majmun/code/wp/wp-content/plugins/project/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:400:16
at Array.forEach (<anonymous>)
at /home/majmun/code/wp/wp-content/plugins/project/node_modules/glob-watcher/node_modules/gaze/lib/gaze.js:396:12
at FSReqWrap.oncomplete (fs.js:153:20)

我正在从主机操作系统而不是从虚拟机运行 gulp,因为它要快得多。

我知道问题是 gulp 在主机操作系统的/tmp 文件夹中执行某些操作,并且某些文件具有 root 权限。

如果我运行 sudo chown -R majmun:users /tmp,之后会出现一个具有 root 权限的新文件,它会破坏 gulp。

为什么 gulp watch 需要/tmp 文件夹。 有人解决了这个问题吗?

这里是 gulp watch 任务的代码 // gulp 观看

 Gulp.task('watch', ['dev'], function() {
        console.log('Initializing assets watcher:')

    let stream = new Stream();
    let filter = '*.{css,scss,sass,less,js,png,jpg,jpeg,svg}';
    let tmp = Tmp.fileSync();
    let glob = [
        path.src.assets + '**/' + filter,
        path.src.elements + '**/' + filter,
        path.src.properties + '**/' + filter,
    ];

    for (let i = 0; i < glob.length; i++) {
        console.log('- ' + glob[i]);
    }

    let watcher = Gulp.watch(glob, ['dev']);
    watcher.add(tmp.name);

    process.on('SIGINT', function() {
        stream.emit('end');
        process.exit(0);
    });

    KeyPress(process.stdin);
    process.stdin.on('keypress', function(char, key) {
        if (key && key.ctrl && key.name == 'c') {
            process.emit('SIGINT');
        }
        else if (key && key.ctrl && key.name == 'r') {
            Fs.utimes(tmp.name, new Date(), new Date(), function() {});
        }
    });
    process.stdin.setRawMode(true);
    process.stdin.resume();

    console.log('Watcher up and running, Ctrl+R to refresh, Ctrl+C to exit.');
    return stream;
});

【问题讨论】:

  • 请问您是如何安装 gulp 的?
  • @funilrys 我通过 yaourt 从 AUR (archlinux.org/packages/community/any/gulp) 安装了 gulp,还使用 ​​npm install 安装了所有项目节点模块
  • 你能发布你的 Gulpfile 的内容吗?

标签: javascript gulp archlinux gulp-watch


【解决方案1】:

我通过在使用 tmp 库时添加一些选项来解决此问题。我指定了临时文件夹的位置及其权限,而不是默认选项。

所以不要这样:

let tmp = Tmp.fileSync();

我这样做了:

let tmp = Tmp.fileSync({ 
    // Use settings from .env if defined 
    dir: process.env.MY_TMP_DIR || ''
    mode: process.env.MY_TMP_MODE || '', 
    prefix: process.env.MY_TMP_PREFIX || '', 
}); 

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2020-04-03
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多