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.js및 package.json새로운 "숨겨진"디렉토리에.npm
  2. cd .npm및 npm 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.11및 node버전과 함께 0.12.

나는 보통 (이 경우에도) aurora기본 테마로 사용하고 자신 package.json과 gulp.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.json및 node_modules폴더를 원래 테마 폴더로 한 수준 위로 이동했습니다. gulp분할 오류없이 실행할 수 있었고 browsersync예상대로 작동했습니다.



-1

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

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