Bagaimana cara mencegah Drupal meningkatkan kesalahan segmentasi saat menggunakan alur kerja theming Node.js?

33

Gejala:

Beberapa perintah drush gagal; Beberapa halaman Drupal kosong.
Perintah drush yang gagal melaporkan "Segmentasi fault: 11"
Log Apache (mis. Php-error.log di MAMP) juga menunjukkan kesalahan yang sama.

Latar Belakang:

Jika Anda menggunakan alur kerja kasar atau kasar - untuk mengkompilasi SASS tema Anda, dll. - Anda dapat mengalami masalah ketika perintah drush melempar kesalahan segmentasi 11 seperti halnya Apache saat melayani halaman Drupal sebagai blank (WSD).

Kemungkinan penyebab

Ini karena file dari lingkungan alur kerja gruntatau Anda keliru didaftarkan oleh Drupal sendiri sebagai produk ganda misalnya. Ada lusinan file .js dan Drupal ini tidak dapat menangani mereka ... itu mungkin regre PCRE yang merupakan penyebab utama seperti ini dikenal di tempat lain. Lagi pula ...gulpnode_modulesdrush cache-clear all

Itu tidak selalu terjadi

Tidak jelas apakah beberapa modul (seperti Browser Sync misalnya) menginduksi kesalahan ini sebagai gaya node.js (yaitu tegukan atau gerutuan) dapat bekerja dengan sempurna sebelum gagal dengan cara ini.

iainH
sumber
Saya dapat mengonfirmasi Browser Sync & gulp-imagemin juga merepotkan bagi saya. Secara keseluruhan file .info dalam folder bersarang adalah masalahnya.
poliklik
FYI: Saya pernah menemui masalah yang sama menggunakan ZURB Foundation dengan Drupal, lihat edisi drupal.org/node/2514350
Scorchio
Kami mencoba untuk memperbaikinya dalam inti Drupal. Tambahkan pendapat Anda dan uji tambalan dari masalah ini drupal.org/node/2329453
corbacho
Ada masalah untuk Drupal 7 dengan tambalan yang memecahkan masalah: drupal.org/node/619542 Ada masalah Drupal 8 yang terkait (kurang parah): drupal.org/node/2329453
malcomio
Ini juga menyebabkan banyak perintah Drush gagal bagi kita (misalnya drush cc all), menambah kebingungan.
Cole Kettler

Jawaban:

25

Inilah solusi yang Anda cari. Jauh lebih elegan dan sedikit kerja:

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

Hanya sedikit perubahan pada jawaban @ iamcarico di atas.

Catatan: Anda mungkin memerlukan .npmrc hanya dengan konten berikut:

unsafe-perm = true
Ryan McVeigh
sumber
Tampaknya juga terjadi dengan file YML :(
Tom Roggero
7

Jadi, saya punya solusi yang sedikit lebih elegan, yang hanya akan menghapus file .info setelah menginstal npm. Tidak ada yang dibutuhkan, jadi ini harus aman.

Tambahkan yang berikut ke akhir package.json Anda:

"scripts": {
  "postinstall": "find node_modules/ -name \"*.info\" -type f -delete"
}
iamcarrico
sumber
Gagasan untuk memodifikasi file package.json tidak begitu baik, seperti yang saya jelaskan di sini: drupal.org/node/2309023#comment-9531611
David Herron
5

Ini bekerja untuk saya:

(Dengan banyak terima kasih kepada @jorgegc untuk mengidentifikasi penyebab di utas ini di saya pikir topik pantas judul yang lebih umum di sini.)

  1. Pindahkan gulpfile.jsdan package.jsonke direktori "tersembunyi" yang baru.npm
  2. cd .npmdan npm install(tentu saja setelah menghapus node_modulesdirektori level root tema tema )
  3. sunting gulpfile.jsdirektori dasar untuk path file sumber dan tujuan. Dalam snippet di bawah "../" ditambahkan ke paths
  4. pada gilirannya, aktifkan gulpperintah dari dalam .npmdirektori

Contoh struktur direktori untuk tema 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

Kepala gulpfile.js

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

iainH
sumber
Ini tiketnya!
jsheffers
3

Anda dapat menghindari semua ini dengan menginstal alat alur kerja Anda di root situs Drupal. Itu tidak akan memindai node_modulesfolder tingkat atas .

Menginstal di level root juga memiliki manfaat lain, seperti memungkinkan Anda untuk membasahi seluruh proyek Anda dengan cara yang seragam (modul khusus, Fitur, dan tema Anda dapat membagikan konfigurasi level root ini). Asalkan Anda kelompok sites/all/moduleske dalam contribdan customsubdirektori, Anda dapat dengan mudah mengabaikan sumbangsih dan folder vendor lainnya.

Chris Ruppel
sumber
Kami telah mengikuti trik folder instalasi .npm di atas komentar Anda sebelumnya. Lalu kami beralih ke Gulp. gulp-eslint tidak menangani navigasi ke direktori induk untuk melacak dan menyisir file. Jadi kami memindahkan skrip bangunan kami (dan node_modules) di samping dokumen situs kami dan semuanya berfungsi dengan baik sekarang. terima kasih atas jawaban ini!
Eric Steinborn
1

Tampaknya masih menjadi masalah dan saya juga mendapat kesalahan berikut: Segmentation fault: 11setelah berjalan npm install.

Saya menggunakan gulpversi 3.8.11dan nodedengan versi 0.12.

Saya biasanya (dalam hal ini juga) digunakan aurorasebagai tema dasar dan menggunakan sendiri package.jsondan gulp.jsberkas. Saya package.jsonfile berisi iamcarrico ini naskah postinstall:

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

Hmm, pada titik ini saya baru tahu bahwa skrip postinstall sedikit berbeda yang mungkin menyebabkan kesalahan kesalahan Segmentasi saya. Bagaimanapun.

Apa yang saya lakukan adalah saya menghapus node_modulesdirektori dalam tema saya rm -rf ./node_modules. Membersihkan cache dengan drush drush cc all. Kemudian saya mengikuti instruksi iainh di atas ... sampai tidak. 3 (3 tidak termasuk), berlari find node_modules -type f -name '*.info' | xargs rm;di dalam .npmfolder dan memindahkan gulp.js, package.jsondan node_modulesfolder satu tingkat ke folder tema asli. Saya dapat berjalan gulptanpa kesalahan segmentasi dan bahkan browsersyncbekerja seperti yang diharapkan.

4aficiona2
sumber
-1

solusi saya adalah di masa lalu untuk memindahkan barang-barang simpul di dalam folder tersembunyi seperti ".npm" misalnya.

Jehu
sumber