【问题标题】:Symfony Webpack encore error on run. encore: Permission deniedSymfony Webpack 运行时出现错误。安可:权限被拒绝
【发布时间】:2019-02-08 20:48:01
【问题描述】:

带有 webpack encore 的 Symfony 4.1 在使用 npm/yarn 运行时出错

我按照symfony官方文档中提到的步骤,通过composer require webpack-encore成功安装并在npm install之后,我尝试npm run dev并得到以下错误,使用yarn encore dev时出现相同的权限被拒绝。

我正在使用 debian 9

kamii@kamii-workstation:~$ node -v
v10.9.0
kamii@kamii-workstation:~$ npm -v
6.4.1
kamii@kamii-workstation:~$ yarn -v
1.9.4

通过 NPM:

kamii@kamii-workstation:/media/disks/Development/dev_lab_gen/exim_pos$ npm run dev

> @ dev /media/disks/Development/dev_lab_gen/exim_pos
> encore dev

sh: 1: encore: Permission denied
npm ERR! code ELIFECYCLE
npm ERR! errno 126
npm ERR! @ dev: `encore dev`
npm ERR! Exit status 126
npm ERR! 
npm ERR! Failed at the @ dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/kamii/.npm/_logs/2018-09-03T20_11_01_530Z-debug.log

通过纱线

kamii@kamii-workstation:/media/disks/Development/dev_lab_gen/exim_pos$ yarn encore dev
yarn run v1.9.4
$ /media/disks/Development/dev_lab_gen/exim_pos/node_modules/.bin/encore dev
/bin/sh: 1: /media/disks/Development/dev_lab_gen/exim_pos/node_modules/.bin/encore: Permission denied
error Command failed with exit code 126.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

这里是 NPM 日志文件

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'dev' ]
2 info using npm@6.4.1
3 info using node@v10.9.0
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle @~predev: @
6 info lifecycle @~dev: @
7 verbose lifecycle @~dev: unsafe-perm in lifecycle true
8 verbose lifecycle @~dev: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/media/disks/Development/dev_lab_gen/exim_pos/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
9 verbose lifecycle @~dev: CWD: /media/disks/Development/dev_lab_gen/exim_pos
10 silly lifecycle @~dev: Args: [ '-c', 'encore dev' ]
11 silly lifecycle @~dev: Returned: code: 126  signal: null
12 info lifecycle @~dev: Failed to exec dev script
13 verbose stack Error: @ dev: `encore dev`
13 verbose stack Exit status 126
13 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
13 verbose stack     at EventEmitter.emit (events.js:182:13)
13 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:182:13)
13 verbose stack     at maybeClose (internal/child_process.js:961:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:250:5)
14 verbose pkgid @
15 verbose cwd /media/disks/Development/dev_lab_gen/exim_pos
16 verbose Linux 4.9.0-8-amd64
17 verbose argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
18 verbose node v10.9.0
19 verbose npm  v6.4.1
20 error code ELIFECYCLE
21 error errno 126
22 error @ dev: `encore dev`
22 error Exit status 126
23 error Failed at the @ dev script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 126, true ]

【问题讨论】:

  • 尝试使用“./node_modules/.bin/encore dev-server”
  • @joseFG 哦,我没想到。 node ./node_modules/.bin/encore dev 工作。你能解释一下为什么它不能与 npm/yarn 一起工作吗?谢谢

标签: symfony npm webpack yarnpkg webpack-encore


【解决方案1】:

在我的情况下,删除 node_modules 文件夹并运行 yarn install 有帮助。我的目录权限发生了变化,它影响了本地安装的 encore。

【讨论】:

    【解决方案2】:

    我在一个默认挂载noexec 标志的分区上。在/etc/fstab 中显式添加exec 标志解决了我的问题,甚至解决了gulp 的其他一些权限问题。

    用户挂载的分区,例如在 /etc/fstab 文件中使用“user”或“users”挂载选项时,出于安全原因,默认使用“noexec”挂载选项。这意味着执行的内存映射 (mmap) 文件将被拒绝。另一个原因可能是缺乏对已添加到 Linux 内核 2.6.26 的共享可写 mmap 的内核支持。

    解决方案:将“exec”挂载选项添加到挂载选项的末尾。最后一个选项很重要,否则其他挂载选项可能会过度判断其效果。但是也请注意,Wine 并不是为直接从 Windows 分区运行任意应用程序而设计的。为此,必须先通过 Wine 将 Windows 应用程序安装到 Windows 分区上。

    【讨论】:

      【解决方案3】:

      试试这个: ./node_modules/.bin/encore dev-server

      如果是这样,您可能已经全局安装了 encore,因此当您运行它时,您没有权限在全局文件夹中执行此操作。

      echo $PATH 并检查是否再来一次。

      【讨论】:

      • 所述命令未运行并返回相同的“权限被拒绝”错误。尽管node ./node_modules/.bin/encore dev 工作得很好。 Encore 没有全局安装,因为我从未明确安装过,它是在 Symfony webpack-encore 初始设置期间在项目中本地安装的。
      【解决方案4】:

      我将依靠@Jose 的评论并分享一些常见的陷阱:

      在安装encore 时,您是否放置了-g(用于全局)标志?如果不是,那可能就是原因。

      另一个常见的事情是您的encore 确实是全局安装的(可能是/usr/local/bin),但您的操作系统看不到它。这可能仅仅是由于糟糕的$PATH。尝试运行source ~/.bash_profile,然后重试。如果您仍然无法运行它,则该路径可能未包含在您的$PATH 中。

      最后,几个月前,我用全新的 Centos 安装了这一点,node 一直无法在全球范围内安装任何东西。 Google 上的教程会告诉你只需 chmod 777 你的 /usr/bin/usr/local/bin,这简直是个坏主意。相反,配置您的 node 为其模块使用不同的目标路径。

      希望这会有所帮助...

      【讨论】:

      • 我确实想过这个=)
      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2015-11-09
      相关资源
      最近更新 更多