Jamstack Ecommerce Next提供了一种方法,可以使用Next.js来快速使用可配置的电子商务网站快速运行和运行。
开箱即用,该网站使用来自providers/inventoryProvider.js提供商的完全静态数据。您可以通过更改getInventory函数中的调用来更新此提供商以从任何真实API获取数据。

单击此处查看实时预览。




$ git clone https://github.com/jamstack-cms/jamstack-ecommerce.git$ yarn
# or
$ npm install$ npm run dev
# or to build
$ npm run build使用Vercel Cli
vercelnpx serverless该项目使用尾风进行了风格。要了解更多工作的工作原理,请在此处查看尾风文档。
您可能需要更改 /修改的主要文件,组件和图像是:
徽标- public/logo.png
按钮,ListItem等。-组件
形式组件- 组件/formComponents
上下文(状态) - 上下文/mainContext.js
页面(管理员,购物车,结帐,索引) - 页面
模板(类别视图,单项视图,库存视图) - 模板
在设置时,库存是从本地硬编码的库存项目中获取的。可以通过更改库存提供商,可以轻松地将其配置为从Shopify或其他CMS或数据源等远程源中获取。
使用您自己的库存提供商更新UTILS/INVENTORYPROVIDER.JS 。
如果将提供商更改为从远程源获取图像,则可以选择在构建时间下载本地图像以提高性能。这是一些代码的示例,该代码应适用于此用例:
import fs from 'fs'
import axios from 'axios'
import path from 'path'
function getImageKey ( url ) {
const split = url . split ( '/' )
const key = split [ split . length - 1 ]
const keyItems = key . split ( '?' )
const imageKey = keyItems [ 0 ]
return imageKey
}
function getPathName ( url , pathName = 'downloads' ) {
let reqPath = path . join ( __dirname , '..' )
let key = getImageKey ( url )
key = key . replace ( / % / g , "" )
const rawPath = ` ${ reqPath } /public/ ${ pathName } / ${ key } `
return rawPath
}
async function downloadImage ( url ) {
return new Promise ( async ( resolve , reject ) => {
const path = getPathName ( url )
const writer = fs . createWriteStream ( path )
const response = await axios ( {
url ,
method : 'GET' ,
responseType : 'stream'
} )
response . data . pipe ( writer )
writer . on ( 'finish' , resolve )
writer . on ( 'error' , reject )
} )
}
export default downloadImage您可以使用此功能在获取后通过库存数据映射并用参考下载图像的位置替换图像路径,可能看起来像这样:
await Promise . all (
inventory . map ( async ( item , index ) => {
try {
const relativeUrl = `../downloads/ ${ item . image } `
if ( ! fs . existsSync ( ` ${ __dirname } /public/downloads/ ${ item . image } ` ) ) {
await downloadImage ( image )
}
inventory [ index ] . image = relativeUrl
} catch ( err ) {
console . log ( 'error downloading image: ' , err )
}
} )
)更新页面/admin.js,并使用注册,登录,登录,登录并确认方法。
使用方法与实际库存API进行交互的方法更新组件/ViewInventory.js 。
更新组件/formComponents/addInventory.js使用方法将项目添加到实际库存API中。
要查看如何使用Stripe处理付款服务器端的示例,请查看摘要文件夹中的Lambda功能。
另外,请考虑通过将ID数组传递到功能中,计算服务器上的总数,然后比较总数以检查并确保它们匹配的总数来验证总数。