Які найкращі практики для структури великих програм Meteor із багатьма файлами шаблонів HTML? [зачинено]


165

У всіх прикладах (таблиця лідерів, гра слово тощо) вони мають один єдиний файл шаблону HTML. Чи є якийсь великий проект з відкритим кодом Meteor з багатьма різними файлами шаблонів HTML, який ми можемо використовувати як приклад найкращої практики? Не здається практичним розміщувати все, що потрібно великому додатку, в один файл шаблонів.


Метеор - це новий матеріал, я не знаходжу нічого кращого з цього приводу. Я також сподіваюсь на це деякі гільдії
newlife

10
Ви читали частину про Структурування програми у посібнику? Існує певне пояснення щодо сканування та об'єднання файлів HTML.
zwippie

1
Офіційний посібник Meteor пропонує дуже класну структуру файлів. Перевірте тут: guide.meteor.com/structure.html#javascript-structure
Waqas

Відповіді:


16

Збийте все це разом! З документів:

> HTML files in a Meteor application are treated quite a bit differently
> from a server-side framework. Meteor scans all the HTML files in your
> directory for three top-level elements: <head>, <body>, and
> <template>. The head and body sections are seperately concatenated
> into a single head and body, which are transmitted to the client on
> initial page load.
> 
> Template sections, on the other hand, are converted into JavaScript
> functions, available under the Template namespace. It's a really
> convenient way to ship HTML templates to the client. See the templates
> section for more.

29
Однак це хвилює плаката. Lumping нормально, але ви можете побачити, що відбувається з Asana - для його завантаження потрібен екран завантаження> 1MB коду клієнта. Це не прийнятно для багатьох сайтів. Ми подивимось, чи не можемо ми виконати якусь частину завантаження після завантаження основного екрана, але зараз я скептично налаштований. Я думаю, що це має бути особливістю, щоб трохи розбити речі.
Дейв Сандерс

36
Ця відповідь є результатом №1 у google, але вона є надійно застарілою. Інші, майбутні відвідувачі, як я; дивіться нижче!
Клоар

Станом на 1.1.0.2, простий додаток Todo, який вони демонструють, передає 1,7 Мб файлів, коли ви важко перезавантажуєтесь, видаляючи кеш браузера. Для багатьох випадків використання це неприпустимо. : / Речі значно покращуються після кешування активів, але, на перше завантаження, це досить жорстоко.
Джейсон Кім

Ідея: використовувати веб-пакет, робити пачки для речей, ліниво завантажувати їх, коли потрібно.
trusktr

так, Асані потрібен певний час для завантаження. Asana - це також неймовірно добре виконаний реактивний додаток, в якому користувачі створили 175 мільйонів завдань у 2014 році. Програми, які завантажуються швидше, не завжди кращі. Додаток також може запуститися на вашому телефоні. Люди звикнуть до цього.
Макс Ходжес

274

Як і в неофіційному файлі метеорів, я думаю, що це в значній мірі пояснює, як структурувати великий додаток:

Де я повинен розмістити свої файли?

Приклади програм у метеорі дуже прості та не дають великого розуміння. Ось моє сьогоднішнє роздуми щодо найкращого способу зробити це: (будь-які пропозиції / покращення дуже вітаються!)

lib/                       # <- any common code for client/server.
lib/environment.js         # <- general configuration
lib/methods.js             # <- Meteor.method definitions
lib/external               # <- common code from someone else
## Note that js files in lib folders are loaded before other js files.

collections/               # <- definitions of collections and methods on them (could be models/)

client/lib                 # <- client specific libraries (also loaded first)
client/lib/environment.js  # <- configuration of any client side packages
client/lib/helpers         # <- any helpers (handlebars or otherwise) that are used often in view files

client/application.js      # <- subscriptions, basic Meteor.startup code.
client/index.html          # <- toplevel html
client/index.js            # <- and its JS
client/views/<page>.html   # <- the templates specific to a single page
client/views/<page>.js     # <- and the JS to hook it up
client/views/<type>/       # <- if you find you have a lot of views of the same object type
client/stylesheets/        # <- css / styl / less files

server/publications.js     # <- Meteor.publish definitions
server/lib/environment.js  # <- configuration of server side packages

public/                    # <- static files, such as images, that are served directly.

tests/                     # <- unit test files (won't be loaded on client or server)

Для більш великих додатків дискретні функціональні можливості можуть бути розбиті на підкаталоги, які самі організовані за тією ж схемою. Ідея тут полягає в тому, що з часом модуль функціональності може бути об'єднаний в окремий розумний пакет, а в ідеалі - спільний доступ.

feature-foo/               # <- all functionality related to feature 'foo'
feature-foo/lib/           # <- common code
feature-foo/models/        # <- model definitions
feature-foo/client/        # <- files only sent to the client
feature-foo/server/        # <- files only available on the server

Дізнайтеся більше: Неофіційний FAQ щодо метеора


12
ІМХО, це краще, ніж прийнята відповідь. Я зараз спробую.
хакан

17
З 0.6.0 вам набагато краще уникати цього безладу та запускати свою програму повністю із розумних пакетів. Я детальніше розглядаю цей запис у блозі: matb33.me/2013/09/05/meteor-project-structure.html
matb33

1
хтось має підказку куди поставити mobile-config.js?
Чувак

1
Дякую за відповідь та посилання на неофіційне-faq (я новачок у світі метеорів), що вони означають під "загальним кодом від когось іншого"? Дякую!
Кохар

3
Щодо метеору 1.3, я б сказав, що це застаріло через імпорт модуля ES6. Дивіться статтю в посібнику з метеора про структуру заявки: guide.meteor.com/structure.html
Самюель

36

Я згоден з yagooar, але замість:

client / application.js

Використання:

client / main.js

основні. * файли завантажуються останніми. Це допоможе переконатися, що у вас немає проблем із замовленням для завантаження. Докладнішу інформацію див. У документації на Meteor, http://docs.meteor.com/#structuringyourapp .


26

Метеор був розроблений таким чином, що ви структуруєте додаток практично будь-яким способом. Тож якщо вам не сподобається ваша структура, ви можете просто перемістити файл у новий каталог або навіть розділити один файл на багато частин, а в Meteor його майже все одно. Просто зверніть увагу на особливе звернення до клієнтських, серверних та публічних каталогів, як зазначено на головній сторінці документації: http://docs.meteor.com/ .

Просто згуртування всього разом в одній HTML-заливці, безумовно, не стане найкращою практикою.

Ось приклад однієї можливої ​​структури: в одному з моїх додатків, дискусійному форумі я організовую модуль або "тип сторінки" (домашня сторінка, форум, тема, коментар), вводячи файли .css, .html та .js для кожного введіть сторінку в одному каталозі. У мене також є базовий модуль, який містить загальний .css та .js код та головний шаблон, який використовує {{renderPage}} для візуалізації одного з інших модулів залежно від маршрутизатора.

my_app/
    lib/
        router.js
    client/
        base/
            base.html
            base.js
            base.css
        home/
            home.html
            home.js
            home.css
        forum/
            forum.html
            forum.js
            forum.css
        topic/
            topic.html
            topic.js
            topic.css
        comment/
            comment.html
            comment.js
            comment.css

Ви також можете організувати за функціями

my_app/
    lib/
        router.js
    templates/
        base.html
        home.html
        forum.html
        topic.html
        comment.html
    js/
        base.js
        home.js
        forum.js
        topic.js
        comment.js
    css/
        base.css
        home.css
        forum.css
        topic.css
        comment.css

Я сподіваюся, що все ж з’являться деякі більш конкретні структури найкращої практики та конвенції про іменування.


2
Це моя улюблена відповідь. Однією з моїх улюблених речей про Meteor є те, що ви можете структурувати свої файли таким чином, щоб вам подобалося.
CaptSaltyJack

Мені подобається ця відповідь. Я робив це першим способом.
Сун Чо

пов'язані речі повинні бути в безпосередній близькості один від одного. Моя відповідь така, як ваша, але назад.
Макс Ходжес


Я не бачу значення в іменуванні декількох файлів із такою назвою функції, як "тема". Тепер, якщо ви хочете змінити назву функції на "категорію", ви повинні змінити кілька імен файлів. Просто впорядкуйте їх під однією папкою під назвою "тема" та назвіть їх загалом: events.js, views.html, styles, css, route.js тощо.
Макс Ходжес

14

Для всіх, хто гугла на цю тему:

Інструмент emкомандного рядка (від EventedMind, хлопці, що стоять за Залізним маршрутизатором) дуже корисний при встановленні нового додатка Meteor. Це створить приємну структуру файлів / папок. Якщо ви вже працюєте над додатком і хочете його переорганізувати, просто створіть новий проект, emі ви можете використовувати його для натхнення.

Дивіться: https://github.com/EventedMind/em

І ось: /programming/17509551/what-is-the-best-way-to-organize-templates-in-meteor-js


4
Примітка: це було замінено залізо-клі (той же автор). Дивіться: github.com/iron-meteor/iron-cli
j0e

Так, 'em' було перейменовано на залізо-клі, такий же інструмент.
Мікаел Лірбанк

11

Я думаю, що структура файлів із книги «Книга метеорів» - це дійсно добре і добре початок.

/app: 
 /client
   main.html
   main.js
 /server 
 /public
 /lib
 /collections
  • Код у каталозі / server працює лише на сервері.
  • Код у каталозі / client працює лише на клієнті.
  • Все інше працює як на клієнті, так і на сервері.
  • Файли в / lib завантажуються раніше всього.
  • Будь-який головний. * Файл завантажується після всього іншого.
  • Ваші статичні активи (шрифти, зображення тощо) переходять у каталог / public.

10

Створення пакетів

Звичайно, не все підходить до цього підходу, але у великих додатках у вас буде багато функцій, які можна виділити. Все, що відокремлюється та використовується для багаторазового використання, вкладається в пакети, решта - у звичайній структурі каталогів, як зазначено в інших відповідях. Навіть якщо ви не робите пакети, щоб уникнути накладних витрат, структурування коду модульним способом є хорошою ідеєю (див. Ці пропозиції )

Метеор дозволяє чітко контролювати, як ви завантажуєте свої файли (порядок завантаження, де: клієнт / сервер / обидва) та що експортує пакет.

Особливо я вважаю дуже зручним простий спосіб ділитися логікою між відповідними файлами. Скажімо, наприклад, ви хочете зробити якусь функцію утиліти та використовувати в різних файлах. Ви просто зробите це "глобальним" (без цього var), і Meteor загорне його в простір імен пакету, тому він не забруднить глобальний простір імен

Ось офіційний док


6

Через деякий час від кодування meteorjs я щасливий, що маю вільний час, щоб присвятити побудові досить складної онлайн-гри. Структура додатків була однією з моїх перших проблем, і схоже, що кілька дуже хороших програмістів підтримують єдиний пакетний спосіб структурування додатка, який дозволяє вільно з'єднати функціонально різні пакети. Тут є й інші переваги, і 2 дуже хороших статті, що пояснюють цей підхід, можна знайти тут:

http://www.matb33.me/2013/09/05/meteor-project-structure.html http://www.manuel-schoebel.com/blog/meteorjs-package-only-app-structure-with-mediator -паттерн


6

У нас є великий проект (мабуть, один з найбільших проектів Meteor, який хтось створив на сьогоднішній день, оскільки він був у повній розробці протягом 1,5 років). Ми використовуємо однаковий набір імен файлів у кожному перегляді. Це дуже послідовно і допомагає нам швидко орієнтуватися на те, що ми шукаємо:

  • події.js
  • helpers.js
  • templates.html
  • route.js
  • styles.less
  • тощо.

Виглядає так у проекті:

       ├── консолідація запитів
       │ ├── події.js
       │ ├── helpers.js
       │ ├── routers.js
       │ └── templates.html
       ├── customerSpoof
       │ └── routers.js
       ├── приладова панель
       │ ├── події.js
       │ ├── helpers.js
       │ ├── onDestroyed.js
       │ ├── onRender.js
       │ ├── routers.js
       │ └── templates.html
       ├── підтвердження електронною поштою
       │ ├── події.js
       │ ├── helpers.js
       │ ├── routers.js
       │ └── templates.html
       ├── завантаження
       │ ├── styles.css
       │ └── templates.html
       ├── поштова скринька
       │ ├── autoform.js
       │ ├── консолідаціяRequestConfirmation
       │ │ ├── події.js
       │ │ ├── helpers.js
       │ │ ├── onCreate.js
       │ │ ├── onRender.js
       │ │ └── templates.html
       │ ├── події.js
       │ ├── helpers.js

Пов'язані шаблони просто зберігаються разом в одному файлі. Зміст view/order/checkout/templates.htmlпоказаного тут згортається:

<template name="orderCheckout"></template>

<template name="paymentPanel"></template>

<template name="orderCheckoutSummary"></template>

<template name="paypalReturnOrderCheckout"></template>

Ми використовуємо підпапки, коли представлення складні з великою кількістю деталей:

       ├── кошик
       │ ├── addItem
       │ │ ├── autoform.js
       │ │ ├── події.js
       │ │ ├── helpers.js
       │ │ ├── onRender.js
       │ │ ├── routers.js
       │ │ ├── стилі.less
       │ │ └── templates.html
       │ ├── замовлення
       │ │ ├── autoform.js
       │ │ ├── події.js
       │ │ ├── helpers.js
       │ │ ├── onRender.js
       │ │ ├── routers.js
       │ │ └── templates.html
       │ └── вид
       │ ├── autoform.js
       │ ├── deleteItem
       │ │ ├── події.js
       │ │ ├── helpers.js
       │ │ └── templates.html
       │ ├── editItem
       │ │ ├── autoform.js
       │ │ ├── події.js
       │ │ ├── helpers.js
       │ │ └── templates.html
       │ ├── події.js
       │ ├── helpers.js
       │ ├── onDestroyed.js
       │ ├── onRender.js
       │ ├── routers.js
       │ ├── стилі.less
       │ └── templates.html

Ми також розробляємо WebStorm, надзвичайно потужний і гнучкий редактор для розробки Meteor. Ми вважаємо це надзвичайно корисним під час пошуку та організації нашого коду та продуктивної роботи. Перегляд веб-шторму

Раді ділитися деталями на запит.


3
Якщо ви вважаєте, що цю відповідь можна покращити, будь ласка, додайте коментар
Макс Ходжес

Чудовий пост. Запитання: Після цього часу з метеором ви все-таки рекомендуєте його для великих проектів, як-от електронна комерція? Або подумайте про використання рамки, яка може надати вам більше «автономії» як LoopBack або навіть Happi.
Ліко

ми любимо Метеор і робимо все нове в ньому. На жаль, я недостатньо знайомий з LoopBack або Happi, щоб мати думку.
Макс Ходжес

1
Зосередження LoopBacks на API інтерфейсу для завершення робить це схожим на традиційну структуру веб-розробки (як RoR). RoR отримав право REST API, але ми вважаємо, що Метеор має право в режимі реального часу.
Макс Ходжес

Дякуємо за відгук. Ви також організували серверну частину для функцій?
Лико

5

Використовуйте будівельні ліси CLI. Це робить речі дуже легкими.

https://github.com/iron-meteor/iron-cli

після встановлення. використовувати iron create my-appдля створення нового проекту. Це створить для вас таку структуру. Ви також можете використовувати це для існуючих проектів. використання iron migrateв каталозі проектів.

my-app/    
 .iron/    
   config.json    
 bin/    
 build/    
 config/    
   development/    
     env.sh    
     settings.json    
 app/    
   client/    
     collections/    
     lib/    
     stylesheets/    
     templates/    
     head.html    
   lib/    
     collections/    
     controllers/    
     methods.js    
     routes.js    
   packages/    
   private/    
   public/    
   server/    
     collections/    
     controllers/    
     lib/    
     methods.js    
     publish.js    
     bootstrap.js

Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
user2314737

@ user2314737 Кричати, щоб сказати, що відповідач змінив свою публікацію. Тепер він включає в себе основні дані, необхідні для розглянутого питання.
Кілл

4

Я дотримуюся формату котла mattdeom, який вже включає залізний маршрутизатор і модель (Collection2). Дивись нижче :

client/                 # Client folder
    compatibility/      # Libraries which create a global variable
    config/             # Configuration files (on the client)
    lib/                # Library files that get executed first
    startup/            # Javascript files on Meteor.startup()
    stylesheets         # LESS files
    modules/            # Meant for components, such as form and more(*)
    views/              # Contains all views(*)
        common/         # General purpose html templates
model/                  # Model files, for each Meteor.Collection(*)
private/                # Private files
public/                 # Public files
routes/                 # All routes(*)
server/                 # Server folder
    fixtures/           # Meteor.Collection fixtures defined
    lib/                # Server side library folder
    publications/       # Collection publications(*)
    startup/            # On server startup
meteor-boilerplate      # Command line tool

3

Існує багато різних підходів до структури вашого додатка. Наприклад, якщо у вас є маршрутизатор та різні шаблони сторінок, а у внутрішньому шаблоні сторінки є багато частин сторінки тощо, я б структурував це залежно від семантики від вищого> нижчого рівня.

Наприклад:

client
  views
    common
      header
        header.html
        header.js
        header.css
      footer
        footer.html
        footer.js
        footer.css
    pages
      mainPage
        mainPage.html
        mainPage.js
        mainPage.css
        articles
          articles.html
          articles.js
          articles.css
        news
          news.html
          news.js
          news.css
     ...

Звичайно, ви можете розмістити свої шаблони новин у загальній папці, оскільки ви можете використовувати свій шаблон новин на різних сторінках.

Я думаю, що найкраще структурувати додаток так, щоб вам було зручно.

Я написав тут невеликий додаток: http://gold.meteor.com І це так мало, я використовую лише один html-файл і лише один файл template.js .. :)

Сподіваюся, це трохи допоможе


Я не бачу значення в іменуванні декількох файлів із назвою функції, наприклад "статті". Тепер, якщо ви хочете змінити назву функції на "повідомлення", ви повинні змінити назви файлів. Просто впорядкуйте їх під однією папкою під назвою "статті" та назвіть їх "events.js", views.html, стилі, css тощо.
Макс Ходжес

3

Є новий клас у Evented Mind під назвою Налаштування метеорних проектів, який вирішує цю проблему, але також розповідає про конфігурацію проекту та налаштування вашого середовища розробки.

З відео про структуру додатків у класі: Meteor не має дуже сильної думки щодо того, як має бути структурована ваша програма, але ось деякі правила:

1) Порядок завантаження - Метеор спочатку переходить у найглибше місце у файловому каталозі та обробляє файли в алфавітному порядку

2) клієнт і сервер - це спеціальні папки, які Метеор розпізнає

Наша структура виглядає так:

both/
    collections/
        todos.js
    controllers/
        todos_controller.js
    views/
        todos.css
        todos.html
        todos.js
    app.js - includes routes
client/
    collections/
    views/
        app.js
server/
    collections/
    views/
        app.js
packages/
public/

Контролер todos_controller розширює RouteController - те, що постачається із Iron Router.

Зазначений emвище інструмент також отримує велике оновлення прямо зараз і має бути набагато кращим та доступним за посиланням: https://github.com/EventedMind/em


які види всередині / сервер / перегляди /?
stefcud

Я не бачу значення в назві декількох файлів з такою назвою функції, як "todos". Тепер, якщо ви хочете змінити ім'я функції на "завдання", вам доведеться змінити 5 імен файлів. Просто впорядкуйте їх під однією папкою під назвою "todos" і назвіть їх "events.js", views.html, styles, css тощо.
Макс Ходжес

1

Я також шукаю кращі практики для покращення та масштабування моїх додатків за допомогою добре продуманої архітектури. Усі вищезазначені практики працюють для додатків малого та середнього розміру, але вони не спрацьовують, коли ви працюєте в більшій команді. Я спробував кілька способів:

1) Я дотримувався цієї стратегії: https://github.com/aldeed/meteor-autoform для масштабування та повторного використання шаблонів. Автор має дуже гарну ідею щодо компонентного та польового дизайну. Зараз я його реалізую, оскільки спільнота розробила 36 пакетів, які охоплюють майже кожен випадок, і я можу використовувати TypeScript для безпечного типу під час фази розробки.

<template name="autoForm">
  {{#unless afDestroyUpdateForm this.id}}
  {{! afDestroyUpdateForm is a workaround for sticky input attributes}}
  {{! See https://github.com/meteor/meteor/issues/2431 }}
  <form {{atts}}>
    {{> Template.contentBlock ..}}
  </form>
  {{/unless}}
</template>

Ось хороший пост у блозі про те, як це зробити: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/ , а також тут: http: // meteorpedia .com / read / Blaze_Notes

2) Це виглядає настільки перспективно, але останнім часом його не оновлювали. Це пакет, написаний у кавовому сценарії під назвою. Компоненти Blaze ( https://github.com/peerlibrary/meteor-blaze-components ) для Meteor - це система для легкої розробки складних елементів інтерфейсу, які потрібно повторно використовувати навколо вашої програми Meteor. Ви можете використовувати їх у CoffeeScript, ванільному JavaScript та ES6. Найкраще, що компоненти - це OOP. Ось один із їх прикладів:

class ExampleComponent extends BlazeComponent {
  onCreated() {
    this.counter = new ReactiveVar(0);
  }

  events() {
    return [{
      'click .increment': this.onClick
    }];
  }

  onClick(event) {
    this.counter.set(this.counter.get() + 1);
  }

  customHelper() {
    if (this.counter.get() > 10) {
      return "Too many times";
    }
    else if (this.counter.get() === 10) {
      return "Just enough";
    }
    else {
      return "Click more";
    }
  }
}

ExampleComponent.register('ExampleComponent');

{{> ExampleComponent }}

3) Мені подобаються типи та транспілятори, які підказують мені, де і коли щось піде не так. Я використовую TypeScript для роботи з Meteor і знайшов наступне сховище: https://github.com/dataflows/meteor-typescript-utils, схоже, що творець намагався здійснити підхід MVC.

class MainTemplateContext extends MainTemplateData {
    @MeteorTemplate.event("click #heybutton")
    buttonClick(event: Meteor.Event, template: Blaze.Template): void {
        // ...
    }

    @MeteorTemplate.helper
    clicksCount(): number {
        // ...
    }
}

class MainTemplate extends MeteorTemplate.Base<MainTemplateData> {
    constructor() {
        super("MainTemplate", new MainTemplateContext());
    }

    rendered(): void {
        // ...
    }
}

MeteorTemplate.register(new MainTemplate());

<template name="MainTemplate">
    <p>
        <input type="text" placeholder="Say your name..." id="name">
        <input type="button" value="Hey!" id="heybutton">
    </p>
    <p>
        Clicks count: {{ clicksCount }}
    </p>

    <p>
        <ul>
            {{#each clicks }}
                <li> {{ name }} at <a href="{{pathFor 'SingleClick' clickId=_id}}">{{ time }}</a></li>
            {{/each}}
        </ul>
    </p>
</template>

На жаль, цей проект не підтримується або активно розвивається.

4) і я думаю, що це вже згадувалося, ви можете масштабувати за допомогою пакетів. Для цього потрібен хороший абстрактний спосіб мислення. Здається, це працює для телескопа: https://github.com/TelescopeJS/Telescope

5) метеор-шаблон-розширення - надає різні способи копіювання помічників шаблонів, обробників подій та гаків між шаблонами, що дозволяє повторно використовувати код; Недоліком є ​​те, що над усіма копіюваннями повинен піклуватися розробник, часто знову і знову, що стає проблематичним у міру зростання кодової бази; крім того, без чітко визначеного API спільнота не може створювати та ділити компоненти

6) Компоненти потоку - компоненти потоку ближче до Реагують в дизайні API, тоді як Blaze Components зберігають звичні поняття, такі як контексти даних та помічники шаблонів; Компоненти потоку, з іншого боку, все ще використовують обробники подій на основі шаблонів, тоді як Blaze Components роблять їх методами класів, щоб їх було легше розширити або змінити шляхом успадкування; загалом Blaze Components, здається, більш орієнтований на ООП; Компоненти потоку ще не офіційно випущені ( текстові кредити для №5 та №6 https://github.com/peerlibrary/meteor-blaze-components#javascript-and-es6-support )

Числа 2 і 3 теж потребують звикання, але ви з часом наберете швидкість розвитку. Номер чотири дозволяє створювати та тестувати компоненти, щоб зробити ваш код стабільнішим. Номер три має перевагу безпеки повного типу Typescript, що є величезним плюсом, коли ви розвиваєтесь у команді з поганою документацією. Однак я зараз переношу номер два в TypeScript, тому що мені дуже зручно працювати з ним, і мені не потрібно змінювати пакет компілятора, щоб він працював з Meteor, коли я не використовую Gulp.

Досі важко знайти правильний спосіб співпраці з "Метеором". Вам потрібно розібратися в цьому для себе, інакше ви закінчите гарно впорядковану структуру папок, але у вас немає поняття, де все є. Щасливе кодування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.