Node.js 테마 워크 플로우를 사용할 때 Drupal에서 세그먼테이션 오류가 발생하지 않도록하려면 어떻게해야합니까?


33

조짐:

일부 drush 명령은 실패합니다. 일부 Drupal 페이지가 비어 있습니다.
실패한 drush 명령은 "세그먼트 결함 : 11"을보고합니다
. Apache 로그 (예 : MAMP의 php-error.log)도 동일한 오류를 표시합니다.

배경:

gulp 또는 grunt 워크 플로를 사용하는 경우 (테마의 SASS 등을 컴파일하는 경우) Drupal 페이지를 공백 (WSD)으로 제공하는 동안 Apache와 마찬가지로 drush 명령으로 인해 분할 오류 11이 발생하는 문제가 발생할 수 있습니다.

가능한 원인

예를 들어 Drupal 자체 에서 사용자 grunt또는 gulp워크 플로 환경의 파일이 node_modules이중 제품으로 잘못 등록 되었기 때문 drush cache-clear all입니다. 이 .js 파일은 수십 가지가 있으며 Drupal은이 파일을 처리 할 수 ​​없습니다. 다른 곳에서 알려진 것처럼 근본 원인 인 PCRE 정규식 일 수 있습니다. 어쨌든 ...

항상 그런 것은 아닙니다

브라우저 동기화와 같은 일부 모듈이 node.js 스타일 (예 : gulp 또는 grunt) 워크 플로가 이러한 방식으로 실패하기 전에 완벽하게 작동 할 수 있기 때문에이 오류를 유발하는지 여부는 확실하지 않습니다.


브라우저 동기화 및 gulp-imagemin도 문제가 있음을 확인할 수 있습니다. 중첩 된 폴더의 전체 .info 파일이 문제입니다.
polyclick

참고 : 나는 드루팔와 ZURB 재단을 사용하여 같은 문제를 만났다는 문제 참조 drupal.org/node/2514350
Scorchio

Drupal 코어에서이 문제를 해결하려고합니다. 이 문제에서 당신의 의견 및 테스트 패치를 추가 drupal.org/node/2329453
corbacho

Drupal 7에는 문제를 해결하는 패치가 있습니다. drupal.org/node/619542 관련된 Drupal 8 문제가 있습니다 : drupal.org/node/2329453
malcomio

이로 인해 많은 Drush 명령이 실패했습니다 (예 :) drush cc all.
콜 케 틀러

답변:


25

찾고있는 솔루션은 다음과 같습니다. 훨씬 더 우아하고 일이 적습니다.

"scripts": {
  "postinstall": "find node_modules/ -name '*.info' -type f -delete"
}

위의 @iamcarico의 답변을 약간만 변경하십시오.

참고 : 다음 내용 만 포함 된 .npmrc가 필요할 수 있습니다.

unsafe-perm = true

YML 파일에서도 발생하는 것 같습니다 :(
Tom Roggero

7

따라서 npm 설치 후 .info 파일을 제거하는 약간 더 우아한 솔루션이 있습니다. 필요하지 않으므로 안전 해야 합니다.

package.json 끝에 다음을 추가하십시오.

"scripts": {
  "postinstall": "find node_modules/ -name \"*.info\" -type f -delete"
}

여기 설명으로 package.json 파일을 수정할 생각은 그렇게 좋지 않다 : drupal.org/node/2309023#comment-9531611
데이빗 헤론

5

이것은 나를 위해 작동합니다 :

( 이 스레드 에서 원인을 식별 해 준 @jorgegc에게 많은 감사를 드려서 주제가 더 일반적인 제목이라고 생각합니다.)

  1. 이동 gulpfile.jspackage.json새로운 "숨겨진"디렉토리에.npm
  2. cd .npmnpm install(삭제 된 테마 루트 수준 가진 후 node_modules과정의 디렉토리)
  3. gulpfile.js소스 및 대상 파일 경로의 기본 디렉토리를 편집 합니다. 예 : 스 니펫 벨로우에서 "../"가 경로 앞에 추가되었습니다.
  4. 차례로 디렉토리 gulp내에서 명령을 호출 하십시오..npm

ihit 테마의 디렉토리 구조 예

. ├── .editorconfig ├── .git │   ├── HEAD │   ├── ... ├── .gitignore ├── .jshintrc ├── .npm │   ├── gulpfile.js │   ├── node_modules │   └── package.json ├── assets │   ├── images │   ├── js │   └── sass ├── css │   ├── ihit.hacks.css │   └── ihit.styles.css ├── ihit.info ├── ihit.sublime-project ├── ihit.sublime-workspace ├── images │   ├── logo.png │   ├── search-icon.png │   └── sprite.png ├── js │   └── ihit.behaviors.js ├── php │   ├── ihit_breadcrumb.inc │   ├── ihit_form_search_form_alter.inc │   ├── ihit_menu_link.inc │   ├── ihit_menu_tree.inc │   ├── ihit_preprocess_html.inc │   ├── ihit_preprocess_region.inc │   └── ihit_process_page.inc ├── research │   └── Refills ├── screenshot.png ├── template.php └── templates ├── html.tpl.php ├── node--image_gallery.tpl.php ├── node.tpl.php └── page.tpl.php

gulpfile.js 책임자

// project-specific var project = { path: { sass: { source: '../assets/sass/**/*.scss', css_dest: '../css' }, // sass . . .


이것은 티켓이었다!
jsheffers

3

Drupal 사이트의 루트에 워크 플로우 도구를 설치하면이 모든 것을 피할 수 있습니다. 최상위 node_modules폴더 는 검사하지 않습니다 .

루트 수준으로 설치하면 전체 프로젝트를 균일 한 방식으로 보푸라기 (사용자 정의 모듈, 기능 및 테마가이 루트 수준 구성을 공유 할 수 있음)와 같은 다른 이점도 있습니다. 하위 디렉토리 sites/all/modules로 그룹화 contrib하고 custom하위 디렉토리 를 제공하면 contrib 및 기타 공급 업체 폴더를 쉽게 무시할 수 있습니다.


우리는 이전에 귀하의 의견 위에 .npm 설치 폴더 트릭을 따랐습니다. 그런 다음 Gulp로 전환했습니다. gulp-eslint는 파일 추적 및 린트를 위해 상위 디렉토리로 이동하는 것을 처리하지 않습니다. 그래서 우리는 사이트의 docroot 옆에 빌드 스크립트 (및 node_modules)를 옮겼으며 모든 것이 완벽하게 작동합니다. 이 답변에 감사드립니다!
Eric Steinborn

1

여전히 문제가 될 것으로 보인다 나는 또한 다음과 같은 오류가 발생했습니다 : Segmentation fault: 11실행 한 후 npm install.

내가 사용하는 gulp버전 3.8.11node버전과 함께 0.12.

나는 보통 (이 경우에도) aurora기본 테마로 사용하고 자신 package.jsongulp.js파일을 사용 합니다. 내 package.json파일에는 iamcarrico의 설치 후 스크립트 가 포함되어 있습니다 .

  "scripts": {
    "postinstall": "find node_modules -type f -name '*.info' | xargs rm;"
  }

흠,이 시점에서 방금 설치 후 스크립트가 약간 달라서 세그먼테이션 오류 오류가 발생할 수 있음을 알았습니다. 어쨌든.

내가 한 것은로 node_modules테마 내 디렉토리를 제거하는 것이 었 습니다 rm -rf ./node_modules. drush로 캐시를 지 웁니다 drush cc all. 그런 다음 위의 iainh 지침을 따르지 않았습니다. 3 (3 포함되지 않음), 폴더 find node_modules -type f -name '*.info' | xargs rm;내부를 실행 .npm하고 gulp.js, package.jsonnode_modules폴더를 원래 테마 폴더로 한 수준 위로 이동했습니다. gulp분할 오류없이 실행할 수 있었고 browsersync예상대로 작동했습니다.



-1

내 솔루션은 예를 들어 ".npm"과 같은 숨겨진 폴더 내에서 노드 항목을 이전하는 것이 었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.