npm在laradock上安装不起作用

时间:2018-06-22 05:08:22

标签: laravel docker npm npm-install laradock

我使用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项目,它会完美地工作。有人知道为什么吗?

3 个答案:

答案 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