2013-08-15 12 views
13

Chociaż czytałem gdzieś, że "główna" właściwość package.json mogłaby być użyta do skopiowania tylko plików potrzebnych do "dist" lub wdrożenie. Wydaje mi się, że było za to zadanie, ale nie widzę niczego, co mogłoby mi pomóc lub pouczać. Teraz kopiuję wszystko pod węzłem node_modules, ale na pewno nie muszę na przykład dystrybuować przykładowego kodu biblioteki.Jak kopiować z node_modules tylko pliki potrzebne do dystrybucji za pomocą gruntu i grunt-contrib-copy

Czy istnieje zadanie pomruczeń lub inne instrukcje, jak poprawnie korzystać z funkcji contru-kopiowania kopiowania, aby po prostu skopiować pliki z zależności między węzłem a modułem, na przykład ze standardowego obiektu pkg obiektu konfiguracyjnego (parsowanego pliku package.json)?

Odpowiedz

10

pakiet.json nie zawiera wystarczających informacji, aby wiedzieć, co należy uwzględnić. Będziesz musiał przeanalizować wszystkie instrukcje require, ale nawet wtedy są przypadki, których nie możesz wykryć, np. Moduł ładujący zasoby itp.

Właściwy sposób zrobienia tego jest dla autorów pakietów do zignorowania plików, które nie jest potrzebne przy użyciu .npmignore file lub nawet lepiej, użyj files property w package.json, aby wyraźnie określić, jakie pliki powinny być zawarte w pakiecie.

Niestety jednak większość autorów pakietów są leniwi i nie przejmuj się nic z tego ...

Chciałbym zachęcić was do otwarcia PRS na modułach w pytaniu z właściwością files.

6

Można:

1) Użyj zadanie kopiowania skopiować każdy odpowiedni plik do dest katalogu:

copy: 
    js: 
    files: [ 
     { 
     expand: true, 
     cwd: 'node_modules/jquery', 
     src: 'jquery.min.js', 
     dest: 'www/js' 
     }, 
     { 
     expand: true, 
     cwd: 'node_modules/jquery-mobile-bower/js', 
     src: 'jquery.mobile-*.min.js', 
     dest: 'www/js' 
     } 
    ] 

jquery.min.js i jquery.mobile-xyzmin.js zostaną skopiowane zarówno do katalogu www/js.

2) Użyj zadanie concat do Concat wszystkie pliki w jednym pliku dest (przydatna do generowania unikalnych plików JavaScript/stylesheets)

concat: 
    options: 
    separator: ';' 
    js: 
    dest: 'www/js/lib.js' 
    src: [ 
     'node_modules/jquery/jquery.min.js', 
     'node_modules/jquery-mobile-bower/js/jquery.mobile-*.min.js' 
    ] 

jquery.min.js i jquery.mobile-xyzmin.js będzie zostać połączone w pojedynczy plik www/js/lib.js, oddzielony średnikiem.

+0

Myślę, że obecnie "poprawnym" sposobem na zrobienie # 2 jest użycie Browserify lub WebPack zamiast ręcznego łączenia plików js. – Scribblemacher

Powiązane problemy