Symfony Webpack encore运行错误。encore:权限被拒绝。

3

Symfony 4.1使用webpack encore运行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

通过Yarn
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" - Jose Fanjul
@joseFG 哦,我没有考虑到那个。node ./node_modules/.bin/encore dev 运行成功了。你能解释一下为什么用 npm/yarn 不起作用吗?谢谢。 - Kamran Akram
4个回答

3
尝试这样做:./node_modules/.bin/encore dev-server 如果是这样,你可能已经全局安装了encore,因此当你运行它时,你没有权限在全局文件夹中执行它。
写入echo $PATH并检查是否存在encore。

2
所述的命令无法运行,并返回相同的“权限被拒绝”错误。尽管 node ./node_modules/.bin/encore dev 运行得非常好。Encore并没有全局安装,因为我从未显式地安装过它,它是在Symfony webpack-encore的初始设置期间本地安装在项目中的。 - Kamran Akram

1

默认情况下,我的分区被挂载为noexec。在/etc/fstab中显式添加exec标志解决了我的问题,甚至解决了一些与gulp相关的权限问题。

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

解决方案:将“exec”挂载选项添加到挂载选项的末尾。重要的是,该选项必须是最后一个,否则其他挂载选项可能会覆盖其效果。但请注意,Wine不是设计用于直接从Windows分区运行任意应用程序。要这样做,必须首先通过Wine将Windows应用程序安装到Windows分区上。


1
我将依赖于@Jose的评论并分享一些常见陷阱:
在安装encore时,您是否加了-g(全局)标志?如果没有,那可能是原因。
另一个常见问题是,您的encore确实是全局安装的(可能在/usr/local/bin),但您的操作系统看不到它。这可能仅仅是由于错误的$PATH。尝试运行source ~/.bash_profile,然后重试。如果仍无法运行,请检查路径是否包含在$PATH中。
最后,几个月前我遇到了一个很严重的问题,即在Centos的新安装中,node持续无法全局安装任何内容。Google上的教程会告诉你只需chmod 777 /usr/bin或/usr/local/bin,这只是一个非常糟糕的想法。相反,配置您的node使用不同的目标路径来安装其模块。
希望这能有所帮助...

1
我正好考虑到了这个 =) - Jose Fanjul

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接