我使用Laradock创建了一个Laravel项目。运行npm install时,得到以下输出。
> node-sass@4.9.0 install /var/www/npmtest/node_modules/node-sass
> node scripts/install.js
fs.js:119
throw err;
^
Error: EINVAL: invalid argument, open '/var/www/npmtest/node_modules/node-sass/package.json'
at Object.openSync (fs.js:443:3)
at Object.readFileSync (fs.js:348:35)
at Object.Module._extensions..json (internal/modules/cjs/loader.js:719:20)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/var/www/npmtest/node_modules/node-sass/lib/extensions.js:7:9)
at Module._compile (internal/modules/cjs/loader.js:702:30)
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/gauge/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/sass-graph/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back chalk@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/node-sass/node_modules/chalk'
npm WARN rollback Rolling back string-width@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/gauge/node_modules/string-width'
npm WARN rollback Rolling back chalk@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/har-validator/node_modules/chalk'
npm WARN rollback Rolling back assert-plus@1.0.0 failed (this is probably
... ..... .....
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.9.0 install: `node scripts/install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.9.0 install 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! /root/.npm/_logs/2018-06-22T04_51_41_566Z-debug.log
基本上,它无法运行npm install命令。如果我在docker之外创建Laravel项目,它会完美地工作。有人知道为什么吗?
答案 0 :(得分:4)
我也遇到了这个问题。我不知道何时引入此问题,因为我以前曾经能够在该项目上运行npm install
,但是我总是有可能使用yarn install
代替(这似乎可行)
但是,我们正在尝试使用npm,所以我需要使它工作。
docker for windows github repo上有与此相关的问题。出现的问题是使用CIFS 3.02而不是CIFS 2.0装载卷时。 Laradock正在为卷使用绑定安装,看起来它们默认为3.02。
我不是Docker专家,所以也许有更好的方法可以解决此问题,但是我能够弄清楚如何使用CIFS 2.0更新docker-compose.yml
来创建卷,并解决了此问题给我的问题。
在volumes:
部分下,添加一个新卷。您可以命名任何东西,除了现有的已定义卷之一。我叫我的code
。
Laradock版本> = 7.0.0 :docker-compose.yml
文件使用版本3,顶层volumes:
部分定义在文件顶部附近。>
Laradock版本<7 :docker-compose.yml
文件使用版本2,顶层volumes:
部分在文件底部定义。
不幸的是,由于该卷定义在构建上下文之外,因此您将需要对代码的路径进行硬编码。您将无法使用APP_CODE_PATH_HOST
变量(或<7中的APPLICATION
)。
您的volumes:
部分将如下所示:
volumes:
mysql:
driver: ${VOLUMES_DRIVER} (or "local")
percona:
driver: ${VOLUMES_DRIVER} (or "local")
[other volumes removed for brevity...]
code:
driver: "local"
driver_opts:
type: cifs
device: //10.0.75.1/C/path/to/your/code/
o: "rw,relatime,vers=2.0,sec=ntlmsspi,cache=strict,username=[your user name],password=[your password],domain=[your domain, if any; otherwise remove this],uid=0,noforceuid,gid=0,noforcegid,addr=10.0.75.1,file_mode=0755,dir_mode=0755,iocharset=utf8,nounix,serverino,mapposix,nobrl,mfsymlinks,noperm,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1"
您需要使用代码路径更新device:
选项,并且需要更新o:
选项以填写用户名,密码和域。随时在您的.env
文件中创建变量,并在此处使用它们。
定义新卷后,您将需要更新workspace
服务以使用新卷。
Laradock版本> = 7.0.0 :在volumes:
服务的workspace
部分中,将${APP_CODE_PATH_HOST}
替换为新卷的名称(例如, code
)。您的workspace
音量定义如下:
volumes:
- code:${APP_CODE_PATH_CONTAINER}
Laradock版本<7 :在volumes:
服务的applications
部分中,将${APPLICATION}
替换为新卷的名称(例如{{1 }})。如果您的code
服务没有applications
部分,请添加它。您的volumes:
部分定义如下所示:
applications
现在,当您打开容器并登录 applications:
image: tianon/true
volumes:
- code:/var/www
容器时,应该使用CIFS 2.0挂载卷。您可以通过运行workspace
进行验证,并在选项中看到mount | grep cifs
。
vers=2.0
的安装脚本现在应该能够找到package.json文件。假设您没有遇到其他任何错误,node-sass
应该可以正常工作。
答案 1 :(得分:2)
我也遇到了与laradock相同的问题,尽管我没有使用NPM的解决方案。它应该使用yarn install
才能工作,我没有足够的知识来知道为什么会发生这种情况,但我希望它会有所帮助:)!
答案 2 :(得分:-1)
尝试重建工作空间容器:
docker-compose build workspace