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.
- Create a
cdn_assets
folder - Create the
download_assets.js
file at the root of your project - Edit the
download_assets.js
file to match the path to your settings_data.json (line 3) - 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
Combined both here to pull assets from Shopify 2.0 themes, template & config directories with JSON files;
var request = require("request");
var fs = require("fs");
const glob = require("glob");
console.log("Downloading assets for: " + process.argv[2])
var themeDict = {
"#####.myshopify.com": "####/####/###"
};
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) {
if (!assets.has(match[1])) {
assets.add(match[1])
}
}
}
});
}
// get template assets
glob(__dirname + "/+(templates|config)/*.json", {}, (err, files) => {
files.forEach(e => {
var file = require(e);
iterateSettings(file);
})
assets.forEach(function (asset) {
try {
var url =
https://cdn.shopify.com/s/files/1/${themeDict[process.argv[2]]}/files/${asset}
;});
})