• Как подключить файл json к файлу pug?

    werty1001
    @werty1001
    undefined
    const fs = require( 'fs' )
    const path = require( 'path' )
    
    const data = {}
    const dir = 'src/modules/'
    
    try {
    
    	const modules = fs.readdirSync( dir )
    
    	modules.forEach( item => {
    
    		const module = path.join( dir, item )
    
    		if ( ! fs.lstatSync( module ).isDirectory() ) return
    
    		const jsons = fs.readdirSync( module ).filter( item => path.extname( item ) === '.json' )
    
    		jsons.forEach( json => {
    
    			const name = path.basename( json, path.extname( json ) )
    			const file = path.join( dir, item, json )
    
    			data[name] = JSON.parse( fs.readFileSync( file ) )
    
    		})
    
    	})
    
    } catch (e) {
    
    	console.log(e)
    
    }
    
    // далее отправляем данные в PUG (будет глобальный объект jsons)
    
    gulp.task("html", function() {
      return gulp.src("src/pages/*.pug")
        .pipe(plumber())
        .pipe(pug({locals: {jsons: data}}))
        .pipe(gulp.dest("dist"))
    });
    Ответ написан
    3 комментария
  • Синхронный и асинхронный код, почему так называется?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    А сам код синхронным не называется, это его по ошибке или для упрощения так называют. Синхронным и асинхронным называется только API ввода-вывода, т.е. операции, прерывающие исполнение кода и требующие от системы обратиться к внешнему устройству, работающему не синхронно с центральным процессором. Операции ввода-выдвода, каковые есть: работа с дисками, портами, контроллерами, периферийными устройствами, как клава, мыша, тачскрин, разные датчики, вебкамера, сетевые карты, блютузы и другие радиомодули, принтеры, видеокарты и прочее. Все они получают задание от программы, и исполняют его отдельно, своими мощностями. Потом внешние устройства присылают программе сигнал о статусе исполнения и, возможно, полученные данные. Программа все это время может ждать (если у нее синхронное API, т.е. блокирующее) или что-то делать (если асинхронное, т.е. не блокирующее). Если программа ждет, не переходит к выполнению следующего действия, то это синхронный ввод-вывод, потому, что осуществляется процесс синхронизации программы с внешним устройством. Внешне устройство посылает прерывание, которое обрабатывает операционная система и через несколько слоев драйверов оно попадает в программу, обычно в виде колбека или события. Если программа ждала, то вызов API не завершался, она все время слушала, когда придет событие о завершении операции ввода вывода, а получив его API отдает ответ и управление переходит к следующей команде, что и называется, синхронизацией с периферийным устройством. Если программа не ждала, то вызов API сразу завершается и не блокирует поток выполнения программ, это называется асинхронным API, потому, что процесс синхронизации не происходит явно, а ответы возвращаются через события.
    Ответ написан
    3 комментария
  • Организация pug?

    alvvi
    @alvvi
    export default apathy;
    Не претендую на правильность, но для себя удобным счел такой вариант:
    клик
    625af68590094936abeee9ee8e96c937.png

    Каждый компонент - pug-миксин. Миксины могут быть вложенными, например:
    клик
    73a93bf7e39d424f9fa5562a97595cfc.png

    + делаем layout.pug, от которого @extend-им все страницы, инклюдим нужные компоненты и в конце вызываем миксины
    вот так
    b84983c87f8045c283797190552cf5eb.png

    В целом получаются вполне себе реюзабельные блоки вместе с разметкой, логикой стилями и контентом. Такое очень легко натягивать на Express или просто перекидывать с проекта в проект.
    Ответ написан
    4 комментария