VTEX CMS Sauce was created to allow a better deploying experience to VTEX stores. You can use it to upload several templates and files in some seconds, as an alternative to the old VTEX portal.
-
npm install vtex-cms-sauce
. -
Create your api-sauced cms handler:
import { create } from 'vtex-cms-sauce'
const cms = create('https://STORE_NAME.vtexcommercestable.com.br')
...
- Insert your VTEX ID authentication cookie when prompted. NOTE: You must have access to the store you're trying to work on.
cms.saveTemplate(templateName, HTML, isSub = false)
- templateName {String} - From this string, the templateId will be created in background.
- HTML {String} - String containing the HTML template.
- isSub {Boolean} - Pass true if subtemplate
const HTML = `<!DOCTYPE html>
<head>
<title>VTEX</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
`
cms
.saveTemplate('Home', HTML)
.then(console.log)
.catch(console.error)
cms.saveShelfTemplate(templateName, HTML, shelfClass)
- templateName {String} - From this string, the templateId will be created in background.
- HTML {String} - String containing the HTML template.
- shelfClass {String} - Classname of shelf container
const HTML = `
<div class="product">
Product
</div>
`
cms
.saveShelfTemplate('MainShelf', HTML, 'main-shelf')
.then(console.log)
.catch(console.error)
cms.saveFile(filepath)
- filepath {String} - Path of file to be uploaded
cms
.saveFile('/dist/background.png')
.then(console.log)
.catch(console.error)
const path = require('path'),
fs = require('fs'),
create = require('vtex-cms-sauce').create,
pjson = require('../package.json'),
projectVars = require('../config/variables')
const cms = create(`https://${projectVars.STORE_ID}.vtexcommercestable.com.br`)
const appDirectory = fs.realpathSync(process.cwd())
const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath)
const templatePrefix = projectVars.TEMPLATE_PREFIX
const templatesDir = resolveApp('dist/templates')
const subtemplatesDir = resolveApp('dist/subtemplates')
const shelvesDir = resolveApp('dist/shelves')
const filesDir = resolveApp('dist/arquivos')
const getFiles = dir => fs.readdirSync(dir).filter(str => str[0] !== '_')
const sendFiles = (dir, type = 'template') => new Promise(async (resolve, reject) => {
try {
let logs = ''
const files = fs.readdirSync(dir).filter(str => str[0] !== '_')
for (let i = 0; i < files.length; i++) {
let log
let file = files[i]
let content = fs.readFileSync(`${dir}/${file}`, 'utf8')
if (type === 'template') log = await cms.saveTemplate(templatePrefix + file.replace('.html', '').replace('index', 'Home'), content)
else if (type === 'subtemplate') log = await cms.saveTemplate(templatePrefix + file.replace('.html', ''), content, true)
else if (type === 'shelf') log = await cms.saveShelfTemplate(templatePrefix + file.replace('.html', ''), content, 'prateleira')
else if (type === 'file') log = await cms.saveFile(`${dir}/${file}`)
logs += `${log}\n`
}
console.log(logs)
resolve(sendFiles)
} catch(err) {
console.error('Error while sending files.')
reject(sendFiles)
}
})
sendFiles(templatesDir, 'template')
.then(() => sendFiles(subtemplatesDir, 'subtemplate'))
.then(() => sendFiles(shelvesDir, 'shelf'))
.then(() => sendFiles(filesDir, 'file'))
MIT © Mauricio Alvim