Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save CodeBrotha/4b38c2d4b702732317343662f0a3d72c to your computer and use it in GitHub Desktop.
Save CodeBrotha/4b38c2d4b702732317343662f0a3d72c to your computer and use it in GitHub Desktop.
Download a Shopify store's assets used in your theme

It's hard to migrate section themes that rely heavily on images. This bit of code helps you download all the CDN assets of your theme.

  1. Create a cdn_assets folder
  2. Create the download_assets.js file at the root of your project
  3. Edit the download_assets.js file to match the path to your settings_data.json (line 3)
  4. Edit the download_assets.js file to set the "CDN code" of your store. Each file that you upload from /admin/settings/files gets uploaded with the following format: https://cdn.shopify.com/s/files/1/YOUR_CDN_CODE/files/YOURFILE. The format of the code is /\d{4}\/\d{4}/ (four digits, a forward slash, and four digits)

To run the code, simply run: node download_assets.js mainstore.myshopify.com to download all the assets in your theme that are store on mainstore.myshopify.com

var request = require('request');
var fs = require('fs');
var settings = require('./src/config/settings_data.json'); // Set here the path to your "settings_data.json"
console.log("Downloading assets for: " + process.argv[2])
var themeDict = {
"mainstore.myshopify.com": "0912/5154",
"anotherstore.myshopify.com": "2659/8692"
};
var assets = new Set();
var assetRegex = /shopify:\/\/shop_images\/(\S+\.\w+)/;
function iterateSettings(obj) {
Object.keys(obj).forEach(function (key) {
if (typeof obj[key] === 'object') {
return iterateSettings(obj[key]);
}
if (typeof obj[key] === "string") {
var match = obj[key].match(assetRegex)
if (match) {
assets.add(match[1])
}
}
});
}
iterateSettings(settings);
assets.forEach(function (asset) {
var url = `https://cdn.shopify.com/s/files/1/${themeDict[process.argv[2]]}/files/${asset}`
request.get(url).pipe(fs.createWriteStream("./cdn_assets/" + asset))
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment