1.1.0 • Public • Published

Jekpack npm version Build Status codecov

Jekyll is a powerful tool for static sites and Webpack is the first choice to pack assets. Jekpack is the integration of Jekyll and Webpack to make them work together.

Jekpack is for multi pages static sites. If you prefer the SPA(single page application), Webpack + HtmlWebpackPlugin might be another better choice.


Zero config

The Jekpack works without configuration. The default config is good enough to build common static sites.

Clean Project

We made your project tree as clean as possible. The minimal file tree might look like the following:

├── src             
│   ├── _includes   <= Jekyll includes folder
│   ├── _layouts    <= Jekyll layouts folder
│   ├── assets      <= Webpack is responsible to this folder
│   └── index.html
├── node_modules
├── package.json
└── yarn.lock


the default config for both Jekyll and Webpack all can be modified(see the example).


Yes. The function of deployment is also in this pack for you. By the one command jekpack deploy <s3 bucket>, the dist will be deployed to the AWS S3 bucket.

Getting Started


$ npm install -g @bincode/jekpack # or yarn global add @bincode/jekpack

Create a project

$ jekpack new hello-world

Install the dependencies

$ cd hello-world
$ jekpack bundle

Start Dev Servers

$ jekpack dev

Jekyll and Webpack are working together now. All you need to know is only follow the Jekyll rules to code everything inside the src folder. Read Jekyll Documentation for more details, if you are not familiar with it.

All files located at assets folder are managed by webpack. For all files named main.js(inside assets/javascripts) and main.scss(inside assets/stylesheets) will be considered as entry files, these files will be pack via webpack. In HTML, include these files via {% asset_tag main.css %}, {% asset_tag main.js%}. For example, a file located at src/assets/stylesheets/some/page/main.scss can be included via {% asset_tag some/page/main.css %}.

Build Distribution

$ jekpack build

the default output location is ./dist

Deploy to S3

$ jekpack deploy your-bucket-name

If you plan take S3 as website hosting. This command is helpful for you. Be sure the environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are set already before you run the command.

For make life easier, you can create a file with name .env, which contains the following:


These environment variables will be loaded at the beginning of jekpack commands.

If you use CloudFront along with S3, the argument --cloud-front-id can be used to create invalidations.

jekpack deploy your-bucket-name --cloud-front-id your-cloud-front-id

Common Questions

What is about the src/assets/media folder?

This folder is prepared for static assets like images. Assume you have an image located at src/assets/media/jekpack.jpg. In HTML, {% asset_path jekpack.jpg %} will return the output path of the image. If you want to refer it in .scss files, see:

body {
  background: url(~media/jekpack.jpg);

How can I customize Webpack config?

Just create the config files with the same path: config/webpack/base.js, config/webpack/development.js, config/webpack/production.js. For each of them, return the config object with webpack specs.

This example describes how to extend from the default config:

// hello-world/config/webpack/base.js
const webpackMerge = require('webpack-merge'); // this module must be installed by yourself.
const webpack = require('jekpack/node_modules/webpack');
const defaultBaseConfig = require('jekpack/config/webpack/base');
module.exports = webpackMerge(config, {
  plugins: [
    new webpack.ProvidePlugin({
      jQuery: 'jquery',

How can I customize Jekyll config

Just create the config file at config/jekyll.yml. Jekpack will load both default and your configs at the same time.

Any question not mentioned above? Open an issue.



Package Sidebar






Unpacked Size

340 kB

Total Files


Last publish


  • yfxie