Bir Node.js temalı iş akışı kullanırken Drupal'ın segmentasyon hatası oluşturmasını nasıl önlerim?


33

Semptomlar:

Bazı sarhoş komutları başarısız olur; Bazı Drupal sayfaları boş.
Başarısız olan sarhoş komutları "Segmentasyon hatası: 11" i rapor eder
. Apache günlüğü (örn. MAMP içindeki php-error.log) de aynı hatayı gösterir.

Arka fon:

Eğer yutkunma veya huysuz bir iş akışı kullanıyorsanız - temanızın SASS'ını vs. derlemek için - sarhoş komutların Aprup'ta olduğu gibi Drupal sayfalarını boşluklar (WSD'ler) olarak sunarken bir segmentasyon hatası 11 attığı bir problemle karşılaşabilirsiniz.

Muhtemel nedeni

Bunun nedeni, sizin gruntveya gulpiş akışı ortamınızdaki dosyaların node_modulesyanlışlıkla Drupal tarafından drush cache-clear allörneğin bir iki ürün olarak kaydedilmesidir . Bu .js dosyalarının onlarca biçimi var ve Drupal bunları idare edemiyor ... muhtemelen bu başka yerde bilindiği için kök nedeni olan bir PCRE regex'idir. Neyse ...

Her zaman olmaz

Bazı modüllerin (örneğin Browser Sync gibi) bu hatayı node.js tarzı (ör. Yonga veya grunt) iş akışı bu şekilde başarısızlığa uğramadan önce mükemmel bir şekilde çalışıp çalışmayacağı konusunda belirsizdir.


Browser Sync ve gulp-imagemin'in benim için de sıkıntılı olduğunu onaylayabilirim. Genel olarak iç içe klasörlerdeki .info dosyaları sorundur.
polyclick

FYI: Aynı sorunu Drupal ile ZURB Vakfı'nı kullanarak tanıştım, sayı drupal.org/node/2514350
Scorchio,

Bunu Drupal çekirdeğinde düzeltmeye çalışıyoruz. Bu konudaki fikrinizi ve yamalarınızı test edin drupal.org/node/2329453
corbacho

Drupal 7 için sorunu çözen bir düzeltme eki ile ilgili bir sorun var: drupal.org/node/619542 İlgili (daha az ciddi) bir Drupal 8 sorunu var: drupal.org/node/2329453
malcomio

Bu aynı zamanda birçok Drush komutunun bizim için başarısız olmasına (örn. drush cc all) Kargaşaya neden oldu .
Cole Kettler,

Yanıtlar:


25

İşte aradığınız çözüm. Çok daha zarif ve daha az iş:

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

Yukarıda @ iamcarico'nun cevabı üzerine sadece küçük bir değişiklik.

Not: Yalnızca şu içeriğe sahip bir .npmrc'ye ihtiyacınız olabilir:

unsafe-perm = true

Ayrıca YML dosyalarında da gözüküyor :(
Tom Roggero

7

Yani, biraz daha şık bir çözüm var, bu sadece npm kurulumundan sonra .info dosyalarını kaldıracak. Hiçbiri gerekli değil, bu yüzden güvenli olmalı .

Paketinizin sonuna aşağıdakileri ekleyin.json:

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

Package.json dosyalarını değiştirme fikri burada açıkladığım kadar iyi değil: drupal.org/node/2309023#comment-9531611
David Herron

5

Bu benim için çalışıyor:

(Nedenini belirlenmesi için @jorgegc için çok teşekkür ederiz bu parçacığı yapmak azından ben konuyu burada daha genel bir başlık hak ettiler.)

  1. Taşı gulpfile.jsve package.jsonyeni "gizli" dizinine.npm
  2. cd .npmve npm install( node_modulestabii temanın kök dizin dizinini sildikten sonra )
  3. gulpfile.jskaynak ve hedef dosya için taban dizinini düzenle paths.eg
  4. sırayla dizinin gulpiçinden komutu çağır.npm

İhit teması için örnek dizin yapısı

. ├── .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 başkanı

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


Bilet buydu!
jsheffers

3

Tüm bunları, iş akışı araçlarınızı Drupal sitesinin kök dizinine yükleyerek önleyebilirsiniz. Üst düzey bir node_modulesklasörü taramaz .

Kök düzeyinde kurulumun, projenizin tamamını tek tip bir tarzda astarlamanıza izin vermek gibi başka avantajları da vardır (özel modülleriniz, Özellikler ve temalarınız bu kök düzeyinde yapılandırmayı paylaşabilir). Gruplar sites/all/moduleshalinde contribve customalt klasörler halinde grup oluşturursanız , katkıda bulunanları ve diğer satıcı klasörlerini kolayca göz ardı edebilirsiniz.


.Npm kurulum klasörünü daha önce yorumunuzun üstünde takip etmiştik. Sonra Gulp'a geçtik. gulp-eslint, dosyaları izlemek ve sıralamak için bir ana dizine gitmeyi işlemez. Bu yüzden derleme komut dosyalarımızı (ve node_modules) sitemizin dokümanı yanında taşıdık ve her şey mükemmel çalışıyor. bu cevap için teşekkürler!
Eric Steinborn

1

Hala bir sorun gibi görünüyor ve ayrıca aşağıdaki hatayı aldım: Segmentation fault: 11çalıştırdıktan sonra npm install.

Kullandığım gulpsürümü 3.8.11ve nodesürümü ile 0.12.

Genelde (bu durumda da) auroratemel tema olarak kullanıyorum ve bir kendi package.jsonve gulp.jsdosya kullanıyorum. Benim dosyam iamcarrico'nun postinstall betiğini package.jsoniçeriyor :

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

Hmm, bu noktada, postinstall betiğinin Segmentation hata hatasına neden olabilecek biraz farklı olduğunu anladım. Neyse.

Yaptığım, temamdaki node_modulesdizini kaldırmamdı rm -rf ./node_modules. Önbellek sarhoş ile temizlendi drush cc all. Sonra yukarıdaki nota talimatlarını izledim ... hayır. 3 (3 dahil değildir), klasörün find node_modules -type f -name '*.info' | xargs rm;içinde koştu .npmve gulp.js, package.jsonve node_modulesklasörü bir seviye üst tema klasörüne taşıdı . gulpSegmentasyon hataları olmadan koşabilir ve hatta browsersyncbeklendiği gibi çalıştı.



-1

benim çözümüm geçmişte düğüm öğelerini örneğin ".npm" gibi gizli bir klasörün içinde taşımaktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.