Настройки

В config.js вы можете задать разные конфигурации для сайта:

const port = {
  https: 4000,
  http: 3000
};

const hostname = "0.0.0.0";

const i18nOptions = {
  defaultLocale: "en",
  crowdin: {
    id: "cmints-website"
  }
};

const templateData =
{
  site: {
    domain: "cmints.io",
    title: "CMintS",
    description: "CMS created with the internationalization in mind"
  }
};

module.exports = {templateData, i18nOptions, port, hostname};

Этот файл может переписать конфигураций заданные по умолчанию CMintS-ом.

port

Specifies on which port to run the server, by default it's 3000 for http and 4000 for https.

const port = {
  https: 4000,
  http: 3000
};

module.exports = {port};

hostname

Определяет адрес хоста сервера. По умолчанию используется 127.0.0.1.

const hostname = "0.0.0.0";

module.exports = {hostname};

root

Определяет корневой каталог сайта.

const root = "/project-root";

module.exports = {root};

i18nOptions

Используется только для многоязычных проектов:

const i18nOptions = {
  defaultLocale: "en",
  type: "Index",
  prefix: "{",
  postfix: "}",
  crowdin: {
    id: "cmints-website",
    updateOption: "update_as_unapproved"
  }
};

module.exports = {i18nOptions};

defaultLocale

Указывает основной язык проекта. Подробнее о defaultLocale.

type

  • Index (По умолчанию)
  • Double

Существует два способа, генерации многоязычного веб-сайта - дублировать содержание на странице конкретного языка для пути перенаправления при необходимости от одного из версия (пример.: для перенаправления на предпочитаемый язык пользовотельского устроиства) или генерации контента основного язык как корень в директории content . По умолчанию используется опция Index, в этом случае только одна версия языка страницы по умолчанию генерируется. Double позволяет чтобы иметь дублирование основного языка, где вы можете установки например перенаправление с помощью urllocale.

Пример ниже показыват генерацию страницы about когда en используется как основной язык(локаль):

  • about.html
  • en/about.html Double
  • de/about/html

detectLang

Эта опция может только использоваться когда запускается CMintS сервер с опцией i18nOptions.type установленного на Double. Эта опция использует языковые опции пользователя установленные в браузере для переадресации на предпочтительный язык сайта. Эта опция не действует когда вы генерируете статичный контент.

crowdin.id

Идентификатор проекта Crowdin. Узнайте Подробнее про идентификатор crowdin.id

crowdin.updateOption

  • update_as_unapproved(По умолчанию) - Сохранить переводы с отменой их утверждений.
  • update_without_changes - Сохранить переводы с и их утверждения.
  • null - переводы измененных строк будут утеряны.
const i18nOptions = {
  defaultLocale: "en",
  crowdin: {
    id: "cmints-website",
    updateOption: null
  }
};

prefix, postfix

Используется для настройки пользовательского префикса и постфикса для строк интернационализации. Подробнее о пользовательском префиксе и постфиксе.

templateData

данные и функции в шаблонных данных могут быть доступны с .ejs страниц и макета файлов:

Рассмотрим:

/* config.js */

const templateData =
{
  site: {
    domain: "cmints.io",
    title: "CMintS",
    description: "CMS created with the internationalization in mind",
    navigations: [
      {path: "documentation", stringId: "header-menu-item-docs"},
      {path: "presentation", stringId: "header-menu-item-slides"}
    ]
  }
};

module.exports = {templateData};

Таким образом, указанные данные могут быть доступны как в примере:

<!DOCTYPE html>
  <head>
    <title><%= site.title %> | <%= page.title %></title>
    <meta name="twitter:title" content="<%= site.title %> | {page.title}">
  </head>
  <body>
...

Или:

<% for (let navigation of site.navigations) { %>
  <li>
    <a <%-i18n.href(navigation.path)%>
      <% if (navigation.path == page.pathname) { %>class="active"<% } %>>
      {<%-navigation.stringId%>(header)}
    </a>
  </li>
<% } %>

jsModuleOptions

Можно использовать чтобы настроить Разные опции генерации для Модулей JS. Пример ниже показывает как добавить source map к генерируемым файлом для удобства отладки:

const jsModuleOptions = {
  debug: true
}

module.exports = {jsModuleOptions};

Минификация

Для минифицированного вывода JS модулей просто укажите опцию minify:

const jsModuleOptions = {
  minify: true
}

module.exports = {jsModuleOptions};

Можно также использовать различные uglify-es конфигурации для минификации JS модулей. В приведенном ниже примере добавляется sourceMap к минифицированным файлам:

const jsModuleOptions = {
  minify: {
    sourceMap: true
  }
}

module.exports = {jsModuleOptions};

lessOptions

Может использоваться для задачи различных опций к генераций CSS. Пример ниже показывает как добавить source map к генерируемым файлом для отладок:

const lessOptions =
{
  sourceMap: {
    sourceMapFileInline: true
  }
};

module.exports = {lessOptions};

Минификация

Для минифицированного вывода LESS просто укажите опцию minify:

const lessOptions = {
  minify: true
}

module.exports = {lessOptions};

Вы также можете использовать разные clean-css конфигурации для минификации модулей JS. Пример ниже добавляет sourceMap к минифицированному файлу:

const lessOptions = {
  minify: {
    sourceMap: true
  }
}

module.exports = {lessOptions};

markdownOptions

Use markdownOptions to change variouse markdown configurations. The example below adds syntax highlighting to code blocks:

const markdownOptions = {
  highlight: (str, lang) => (lang && getLanguage(lang)) ? highlight(lang, str).value : ""
};

Markdown plugins

You can use markdown-it plugins to extend markdown parser. That can be done using plugins property of markdownOptions configuration. Each plugin item can be either array, with plugin as the first item and plugin params as the rest, or by just by passing plugin if no other parameter needs to be specified. The example below adds markdown-it-link-attributes plugin to the project with configuration to open all external links in the separate tab and markdown-it-footnote plugin:

// Open external links in the new tab
const markdownLink = require("markdown-it-link-attributes");
const markdownItFootnote = require("markdown-it-footnote");
const markdownOptions = {
  plugins: [
    [
      markdownLink, {
        pattern: /^https?:\/\//,
        attrs: {
          target: "_blank",
          rel: "noopener"
        }
      }
    ],
    markdownItFootnote
  ]
};

module.exports = {markdownOptions};

configReloadWatchers

config.js does more than configuration and it's can be used for a robust action also you can call other modules and/or JSON files from config.js and you might not want restart the development server each time you update the other file, for that reason you can specify configReloadWatchers:

const configReloadWatchers = ["data.json", "syncinit.js"];
module.exports = {configReloadWatchers};