Làm cách nào để ngăn Drupal tăng lỗi phân đoạn khi sử dụng quy trình làm việc theo chủ đề Node.js?


33

Triệu chứng:

Một số lệnh drush thất bại; Một số trang Drupal trống.
Báo cáo lệnh drush không thành công "Lỗi phân đoạn: 11"
Nhật ký Apache (ví dụ: php-error.log trong MAMP) cũng hiển thị lỗi tương tự.

Lý lịch:

Nếu bạn sử dụng một luồng công việc gulp hoặc grunt - để biên dịch SASS của chủ đề của bạn, v.v. - bạn có thể gặp phải một vấn đề trong đó các lệnh drush ném một lỗi phân đoạn 11 cũng như Apache trong khi phục vụ các trang Drupal dưới dạng khoảng trống (WSD).

Nguyên nhân có thể xảy ra

Điều này là do các tệp từ môi trường dòng công việc grunthoặc gulpcông việc của bạn node_modulesđược đăng ký nhầm bởi chính Drupal như một sản phẩm sinh học drush cache-clear allchẳng hạn. Có hàng tá tệp .js này và Drupal không thể xử lý chúng ... có thể đó là biểu thức chính của PCRE là nguyên nhân gốc rễ như điều này được biết ở nơi khác. Dù sao ...

Nó không luôn luôn xảy ra

Không rõ liệu một số mô-đun (như Trình đồng bộ hóa trình duyệt chẳng hạn) gây ra lỗi này dưới dạng luồng công việc kiểu node.js (tức là gulp hoặc grunt) có thể hoạt động hoàn hảo trước khi thất bại theo cách này.


Tôi có thể xác nhận Đồng bộ hóa trình duyệt & gulp-fantemin cũng gây rắc rối cho tôi. Tổng thể các tập tin .info trong các thư mục lồng nhau là vấn đề.
cơn bão

FYI: Tôi đã gặp vấn đề tương tự khi sử dụng ZURB Foundation với Drupal, xem vấn đề drupal.org/node/2514350
Scorchio

Chúng tôi đang cố gắng khắc phục điều này trong lõi Drupal. Thêm ý kiến ​​của bạn và các bản vá thử nghiệm từ vấn đề này drupal.org/node/2329453
corbacho

Có một vấn đề đối với Drupal 7 với một bản vá giải quyết vấn đề: drupal.org/node/619542 Có một vấn đề Drupal 8 liên quan (ít nghiêm trọng hơn): drupal.org/node/2329453
malcomio 6/10/2015

Điều này cũng khiến nhiều lệnh Drush thất bại đối với chúng tôi (ví dụ drush cc all), làm tăng thêm sự nhầm lẫn.
Cole Kettler

Câu trả lời:


25

Đây là giải pháp bạn đang tìm kiếm. Thanh lịch hơn và ít làm việc hơn:

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

Chỉ cần một thay đổi nhỏ trên câu trả lời của @ iamcarico ở trên.

lưu ý: bạn có thể cần một .npmrc chỉ với nội dung sau:

unsafe-perm = true

Điều này dường như cũng xảy ra với các tệp YML :(
Tom Roggero

7

Vì vậy, tôi có một giải pháp thanh lịch hơn một chút, đó sẽ chỉ xóa các tệp .info sau khi cài đặt npm. Không cần thiết, vì vậy điều này nên an toàn.

Thêm phần sau vào cuối gói.json của bạn:

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

Ý tưởng sửa đổi các tập tin pack.json không tốt lắm, như tôi giải thích ở đây: drupal.org/node/2309023#comment-9531611
David Herron

5

Điều này làm việc cho tôi:

(Rất cảm ơn @jorgegc vì đã xác định nguyên nhân trong chủ đề này, tôi nghĩ chủ đề này xứng đáng với một tiêu đề tổng quát hơn ở đây.)

  1. Di chuyển gulpfile.jspackage.jsonđến thư mục "ẩn" mới.npm
  2. cd .npmnpm install(sau khi đã xóa node_modulesthư mục gốc cấp chủ đề )
  3. chỉnh sửa gulpfile.jsthư mục cơ sở cho đường dẫn tệp nguồn và đích.eg Trong đoạn trích dưới đây "../" đã được thêm vào đường dẫn
  4. lần lượt, gọi gulplệnh từ trong .npmthư mục

Cấu trúc thư mục ví dụ cho chủ đề 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

Trưởng gulpfile.js

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


Đây là vé!
jsheffers

3

Bạn có thể tránh tất cả những điều này bằng cách cài đặt các công cụ quy trình công việc của bạn trong thư mục gốc của trang web Drupal. Nó sẽ không quét một node_modulesthư mục cấp cao nhất .

Cài đặt ở cấp độ gốc cũng có những lợi ích khác, như cho phép bạn điều chỉnh toàn bộ dự án của mình một cách thống nhất (các mô-đun, Tính năng và chủ đề tùy chỉnh của bạn có thể chia sẻ cấu hình cấp gốc này). Miễn là bạn nhóm sites/all/modulesvào contribcustomcác thư mục con, bạn có thể dễ dàng bỏ qua contrib và thư mục nhà cung cấp khác.


Chúng tôi đã làm theo thủ thuật thư mục cài đặt .npm trên nhận xét của bạn trước đây. Sau đó, chúng tôi chuyển sang Gulp. gulp-eslint không xử lý điều hướng đến thư mục cha để theo dõi và linting các tập tin. Vì vậy, chúng tôi đã di chuyển các tập lệnh xây dựng của chúng tôi (và node_modules) bên cạnh docroot của trang web của chúng tôi và mọi thứ hoạt động hoàn hảo ngay bây giờ. cảm ơn vì câu trả lời này
Eric Steinborn

1

Nó dường như vẫn là một vấn đề và tôi cũng gặp phải lỗi Segmentation fault: 11sau : sau khi chạy npm install.

Tôi sử dụng gulpphiên bản 3.8.11nodevới phiên bản 0.12.

Tôi thường (trong trường hợp này cũng vậy) sử dụng auroralàm chủ đề cơ bản và sử dụng một tập tin package.jsonvà riêng gulp.js. package.jsonTập tin của tôi chứa tập lệnh cài đặt bài đăng của iamcarrico :

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

Hmm, tại thời điểm này tôi mới nhận ra rằng tập lệnh postinstall hơi khác một chút có thể gây ra lỗi Phân đoạn của tôi. Dù sao.

Những gì tôi đã làm là tôi loại bỏ node_modulesthư mục trong chủ đề của tôi với rm -rf ./node_modules. Xóa bộ nhớ cache bằng drush drush cc all. Sau đó, tôi làm theo các hướng dẫn trên của iainh ... cho đến khi không. 3 (3 không bao gồm), chạy find node_modules -type f -name '*.info' | xargs rm;bên trong .npmthư mục và di chuyển gulp.js, package.jsonnode_modulesthư mục một cấp lên thư mục chủ đề ban đầu. Tôi có thể chạy gulpmà không có lỗi phân khúc và thậm chí browsersynclàm việc như mong đợi.



-1

giải pháp của tôi là trong quá khứ để di chuyển các công cụ nút bên trong một thư mục ẩn như ".npm" chẳng hạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.