Нам нужны твои мозги

Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.

На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решение.

Фронт: Добавить поддержку process.env.NODE_ENV в dual-publish

Для новичков, задача на неделю

Многие JavaScript-библиотеки используют process.env.NODE_ENV, чтобы включать инструменты разработчика или дополнительные проверки на этапе разработки:

if (process.env.NODE_ENV !== "production") {
  heavyArgsCheck(args);
}

Webpack и другие сборщики умеют вырезать такие конструкции в фронтенд-библиотеках. Но новые сборщики созданные с прицелом на ES-модулей полагаются на package.exports.production вместо process.env.NODE_ENV.

Нужно добавить в dual-publish конвертацию process.env.NODE_ENV в package.exports.production.

Польза: расширить open source портфолио в Node.js.

  1. Форкнуть dual-publish.

  2. Сделать новую ветку.

  3. Открыть process-dir.js.

  4. Если в папке есть index.browser.js, то обработку process.env.NODE_ENV делать именно в нем. Иначе — в index.js.

  5. Проверять файл на наличие process.env.NODE_ENV === 'production' или process.env.NODE_ENV !== 'production'.

  6. При наличии такой конструкции, создавать 2 копии файла — в одной заменить конструкцию на true, в другой — на false.

  7. В обоих файлах заменять CommonJS на ES-модули.

  8. Генерировать package.json вида:

    {
      "exports": {
        "./file": {
          "browser": {
            "production": "./file/index.prod.js",
            "development": "./file/index.dev.js"
          },
          "require": "./file/index.cjs",
          "import": "./file/index.js"
        }
      }
    }