Add optional imgix integration for images

This commit is contained in:
Eric Jinks 2018-05-21 17:25:35 +10:00
parent 2245b9f97a
commit f89e14e713
3 changed files with 33 additions and 8 deletions

View file

@ -1,3 +1,12 @@
## 0.2.3 - 2018-05-21
* Add optional imgix integration for images
* Return to console.log for build console messages
## 0.2.2 - 2018-05-21
* Use ora for build console message
## 0.2.1 - 2018-05-17 ## 0.2.1 - 2018-05-17
* Log netlifySiteUrl when viewing CMS on localhost * Log netlifySiteUrl when viewing CMS on localhost

View file

@ -7,13 +7,12 @@ const sharp = require('sharp')
const glob = util.promisify(globCb) const glob = util.promisify(globCb)
const readFile = util.promisify(fs.readFile) const readFile = util.promisify(fs.readFile)
const { sizes, resizedDir, outputDir } = require('../src/util/getImageUrl') const { sizes, imgixUrl } = require('../src/util/getImageUrl')
const dirPrefix = './public'
const options = { const options = {
inputDir: './public/images/uploads',
outputDir: './public/images/uploads/resized',
sizes, sizes,
inputDir: `${dirPrefix}${outputDir}`,
outputDir: `${dirPrefix}${resizedDir}`,
imageFormats: ['jpg', 'jpeg', 'png', 'gif', 'webp'] imageFormats: ['jpg', 'jpeg', 'png', 'gif', 'webp']
} }
@ -41,7 +40,7 @@ const saveImages = ({ buffer, filename }) => {
filename, filename,
extname extname
)}.${size}${extname}` )}.${size}${extname}`
const outputFile = path.resolve(options.outputDir, newFilename) const outputFile = `${options.outputDir}/${newFilename}`
const fileExists = await doesFileExist({ filename: outputFile }) const fileExists = await doesFileExist({ filename: outputFile })
if (fileExists) return console.log(`↩️ ${outputFile} exists, skipping`) if (fileExists) return console.log(`↩️ ${outputFile} exists, skipping`)
return saveImage({ buffer, size, outputFile }) return saveImage({ buffer, size, outputFile })
@ -87,4 +86,8 @@ const resizeImages = async () => {
} }
} }
resizeImages() if (imgixUrl) {
console.log(`📡 Using imgix to resize images: ${imgixUrl}`)
} else {
resizeImages()
}

View file

@ -1,6 +1,10 @@
const sizes = [10, 300, 600, 1200, 1800] const sizes = [10, 300, 600, 1200, 1800]
const outputDir = '/images/uploads/' const outputDir = '/images/uploads/'
const resizedDir = '/images/uploads/resized/' const resizedDir = '/images/uploads/resized/'
const imgixUrl = null // imgix web folder domain e.g. https://example.imgix.net (no trailing slash)
const getImgixUrl = ({ path, size }) =>
`${imgixUrl}${encodeURI(path)}?w=${size}&fit=max&auto=compress`
const parseFilename = filename => { const parseFilename = filename => {
const parts = filename.match(/(.+)\.([\w]+)$/) const parts = filename.match(/(.+)\.([\w]+)$/)
@ -18,7 +22,14 @@ const getImageSrcset = path => {
const pathname = encodeURI(filename.replace(outputDir, resizedDir)) const pathname = encodeURI(filename.replace(outputDir, resizedDir))
const srcset = sizes const srcset = sizes
.map(size => `${pathname}.${size}.${extname} ${size}w`) .map(
size =>
`${
imgixUrl
? getImgixUrl({ path, size })
: `${pathname}.${size}.${extname}`
} ${size}w`
)
.join(', ') .join(', ')
return srcset return srcset
} }
@ -40,6 +51,7 @@ const getImageSrc = (path, sizeRequested) => {
const { filename, extname } = parseFilename(path) const { filename, extname } = parseFilename(path)
const pathname = encodeURI(filename.replace(outputDir, resizedDir)) const pathname = encodeURI(filename.replace(outputDir, resizedDir))
if (imgixUrl) return getImgixUrl({ path, size })
return `${pathname}.${size}.${extname}` return `${pathname}.${size}.${extname}`
} }
@ -48,5 +60,6 @@ module.exports = {
getImageSrc, getImageSrc,
sizes, sizes,
outputDir, outputDir,
resizedDir resizedDir,
imgixUrl
} }