Nasıl göreli yol çok grunt-browserify demetleri aliasing yönetirim?
Bu biraz uzun ama benim kod karışıklık göstermek için örnek lazım. Aşağıdaki cevap için ilgileniyorum sonra:
- Nasıl
require('module')
yerinerequire('../../src/module')
require('./module')
kullanabilirim? - Nasıl iş çoğaltmadan
spec/specs.js
9 *yeniden muyum? (Giriş modülü olarak çalışansrc/app.js
önleyici).
Zaten tarayıcı tabanlı çeşitli projeler başladım ve browserify aşk ve homurtu. Ama her proje geliştirme/benim öğrenme eğrisi aynı noktada ölür. Ben karıştırmak için test eklemek ve bütün sistem çöker browserify iki demetleri (app.js
spec/specs.js
) yönetmek için bir kez. Açıklayayım:
grunt-browserify kullanıyorum ve benim ilk dizin:
.
├── Gruntfile.js
├── index.js (generated via grunt-browserify) [1]
├── lib
│  ├── jquery
│  │  └── jquery.js [2]
│  └── jquery-ui
│  └── jquery-ui.js [3]
├── spec
│  ├── specs.js (generated via grunt-browserify) [4]
│  └── src
│  ├── spec_helper.js (entry)
│  └── module_spec.js (entry)
└── src
  ├── app.js (entry)
  └── module.js
- Kullanan bir kayıt (
src/app.js
) dosya ve paket için kod bir yürüyüş yapargereklimodüller. - Kullanır browserify-shim diğer
jquery
. - Sadece bir dolgu (18 ** sonra gerekli) olmadan
jquery-ui
sağlanır. - Giriş modülleri
spec/src
tüm yardımcı ve spec dosyaları kullanır.
Benim adım config vereceğim:
browserify: {
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var MyModule = require('./module'); // <-- relative path required?!
Mutlu
Åžimdi eklemek jquery:
browserify: {
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
Mutlu
Şimdi Ekle özellikleri:
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'app.js': 'src/app.js'
}
},
spec: {
files: {
'spec/specs.js': ['spec/src/**/*helper.js', 'spec/src/**/*spec.js']
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
// in spec/src/module_spec.js
describe("MyModule", function() {
var MyModule = require('../../src/module'); // <-- This looks like butt!!!
});
Üzücü
Özetlemek gerekirse: ama Nasıl?
require('../../src/module')
require('./module')
yerinerequire('module')
kullan?- iş çoğaltmadan
spec/specs.js
26 *yeniden? (Giriş modülü olarak çalışansrc/app.js
önleyici).
CEVAP
Basit cevap:
Browserify paths
seçeneği kullanmak için basit. Büyük bir başarı ile birkaç ay için kullanıyorum. Hatta bu özelliği kullanan bir başlangıç kiti yaptım: https://github.com/stample/gulp-browserify-react-phonegap-starter
var b = browserify('./app', {paths: ['./node_modules','./src/js']});
yollar gerektirir.dizi için kullanın, hiçbir şey yokmuş yollar normal bulundu node_modules özyinelemeli yürüme mesafesinde
EÄŸer src/js/modulePath/myModule.js
bir dosya varsa, bu size require("myModule")
her yere yazalım, daha ziyade require("modulePath/myModule")
diğer kaynak dosyaları herhangi birinden olmaz.
Seçeneği kaldırılmış mı?
O kadar da zor deÄŸilmiÅŸ!
Browserify modül çözünürlüğü algoritması resolution algorithm in NodeJSaynalar.
Browserify paths
seçeneği böylece NodeJS NODE_PATH
env değişkeni davranışların aynasıdır.
Browserify yazar (substack) NODE_PATH
seçeneği NodeJS ile yazıldı ve böylece de Browserify kaldırılmış ve sonraki sürümlerinde kaldırılmış olabilir bu YÜZDEN konu iddia ediyor.
Bu iddia ile aynı fikirde değilim.
NODE_PATH belgelerine bakın. Seçeneği önerilmiyor elbette yapacaktır. Ancak hala substack iddiası doğru mu ilginç bir söz vardır:
Son derece yerel olarak senin bağımlılıkları yer için teşvik edilir node_modules klasörler. Daha hızlı, daha güvenilir ve daha dolu olacaktır.
Ve this question E-posta listesine 2012'de kaydedildi.
Oliver Leics: is NODE_PATH deprecated?
Ben Noordhuis (ex core NodeJS contributor): No. Why do you ask?
Ve eğer bir şey NodeJS çözüm algoritması kaldırılırsa değil, yakın zamanda Browserify:) kaldırılacaktır sanmıyorum
Sonuç
Ya paths
seçeneğini kullanın ya da resmi belgeleri Browserify author recommends gibi node_modules
kodunuzu girebilirsiniz.
Şahsen, ben fikrimi söyledim sadece kaynak kontrolüm dışında tüm bu klasörü tutmak node_modules
benim kendi kod koymak hoşuma gitmiyor. Birkaç ay için paths
seçeneği şimdi kullanıyorum ve herhangi bir sorun yoktu, ve inşa hızım oldukça iyidir.
İçinde bir sembolik bağ koyarak substack çözüm node_modules
kullanışlı olabilir ama ne yazık ki geliştiriciler Windows ile çalışıyor
Ancak var sanırımpaths
seçeneği kullanmak istemediğiniz bir durumbir kütüphane etmesinin önünü bir depo yayınlanan gelişen zaman diğer uygulamalar tarafından gerekli olacaktır. Gerçekten bu kitaplığı istemcileri göreli yol cehennem önlemek için lib sizi istiyor diye, özel inşa config kurulum istemez.
Başka bir olası seçenek remapify kullanmaktır
Göreli zaman nasıl hesaplanır?...
Nasıl Python ile göreli ithalat yapmak...
Nasıl Raylar göreli zaman yaparsınız?...
Nasıl iki mutlak yol (veya URL) Java g...
Nasıl mutlak yolu göreli bir yol almak...