2016-08-19 58 views
6

Yayınlama yaptığımda Node.js npm paketimin kök dizinini değiştirmek mümkün mü? Ne var şudur: /src yılındanpm'de kök dizinini değiştir yayınla

├── lib 
├── package.json 
├── .npmignore 
├── src 
│   ├── index.js 
│   └── sub 
│    └── mymodule.js 
└── test 

benim ES2015 kaynak kodu tümüdür. Ben Babel ile /lib dizinine aktarıyorum. package.json'umdaki main, lib/index.js'a işaret ediyor. Bundan sonra npm publish yapabilirim (benim .npmignoresrc'a ayarlanmıştır, böylece sadece lib yayınlanacaktır). Şimdi paketim npmjs.com'a dağıtıldı ve başka bir paket içinde import index from 'mypackage' ile içe aktarabilirim. Şimdiye kadar çok iyi. Ama ya doğrudan sub/mymodule.js almak istersem? import mymodule from 'mypackage/lib/sub/mymodule' yazmalıyım. Gerçekten istediğim, yolumda /lib/ olmadan import mymodule from 'mypackage/sub/mymodule'.

Bunu nasıl başarabilirim? Npm belgelerinde, package.json'da ayarlayabildiğim directories.lib belirtiliyor, ancak tamamen yok sayılacak gibi görünüyor. ./lib'a ayarladım ama hiçbir şey yapmıyor.

cevap

2

/lib dizininizi npm publish lib ile yayımlayabilirsiniz. Yayınlamadan önce package.json dosyanızı lib dizinine kopyalamayı unutmayın.

Bir öneri npm komut dosyalarını kullanmaktır: Ben de tam olarak aynı acıyı yaşıyor edilmiştir

"scripts": { "build": "babel src --out-dir lib", "prepublish": "npm run build && cp ./package.json lib" }

+2

Evet, teşekkürler, ancak bu çok çirkin ve hataya açık bir çözümdür, çünkü '/ lib' içine cd yapmak ve bu dizinden' npm yayımlama 'yapmak zorundasınız. Bu adımı unuttuğunuzu ve projenizin kök dizininden yanlışlıkla "npm yayın" yapacağınızı hayal edin. Artık çalışmayan bir kütüphanede son buluyorsunuz. – LongFlick

+1

Bugün bu yoruma rastladım ve tüm yayınlama girişimlerini engelleyen 'package.json' içinde' private: true' ayarlayabileceğinizi anladım. daha sonra '/ lib' dizininizde' package.json' kopyalanırken 'private: true' grep 'i çıkardığınızdan emin olun, bu sadece hazırlanmış dizinde yayınlamanızı sınırlandırır. – Javran

2

. etrafında oynayan bir sürü sonra bu yazı birine dayalı bir cevap ile sona erdi:

"scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "lint": "eslint src/**", 
    "build": "rm -rf ./lib/* && babel src -d lib -s && cp ./package.json lib", 
    "prepublish": "[[ \"$PWD\" =~ YOUR_DIR_HERE/lib ]]", 
    "pub": "pushd ./ && npm run build && cd lib && npm publish && popd" 
} 

Bu değilken yanlış dağıtımları önler lib dir in bir "npm yayımlamak" başarısız olacağı anlamına gelir. Özel bir "npm run pub" kullanmak zorunda kalmamaya istekli değilim, ancak bu şu an için gelebildiğim en iyi çözüm.

+0

Ugh - Bundan daha iyi bir cevap bulmayı umuyordum. Ben de aynı şeyi yapıyorum. Bunu bir taraftan el ile yapıyorsam gerçekten başarısız "npm yayınla" diyorum, ama sorun şu ki, otomatik olarak yayınlayan tüm oluşturma araçlarımız için özel bir durum var. Artık "npm yayınla" nın bir paketi nasıl yayınladığınız olduğunu artık anlayamıyorum. –