Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.
На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решен ие.
Для новичков, задача на неделю
Многие 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.
Форкнуть dual-publish.
Сделать новую ветку.
Открыть process-dir.js
.
Если в папке есть index.browser.js
, то обработку process.env.NODE_ENV
делать именно в нем. Иначе — в index.js
.
Проверять файл на наличие process.env.NODE_ENV === 'production'
или process.env.NODE_ENV !== 'production'
.
При наличии такой конструкции, создавать 2 копии файла — в одной заменить конструкцию на true
, в другой — на false
.
В обоих файлах заменять CommonJS на ES-модули.
Генерировать package.json
вида:
{
"exports": {
"./file": {
"browser": {
"production": "./file/index.prod.js",
"development": "./file/index.dev.js"
},
"require": "./file/index.cjs",
"import": "./file/index.js"
}
}
}