All Projects → MikaAK → S3 Plugin Webpack

MikaAK / S3 Plugin Webpack

Licence: mit
Uploads files to s3 after complete

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to S3 Plugin Webpack

Aws.s3
Amazon Simple Storage Service (S3) API Client
Stars: ✭ 302 (-34.91%)
Mutual labels:  amazon, s3-storage
Vue2 News
基于vue2 + vue-router + vuex 构建的一个新闻类单页面应用 —— 今日头条(移动端)
Stars: ✭ 462 (-0.43%)
Mutual labels:  webpack
React
React+webpack+redux+ant design+axios+less全家桶后台管理框架
Stars: ✭ 4,414 (+851.29%)
Mutual labels:  webpack
React Redux Links
Curated tutorial and resource links I've collected on React, Redux, ES6, and more
Stars: ✭ 21,205 (+4470.04%)
Mutual labels:  webpack
Skplayer
🎵 A simple & beautiful HTML5 music player
Stars: ✭ 437 (-5.82%)
Mutual labels:  webpack
Serviceworker Webpack Plugin
Simplifies creation of a service worker to serve your webpack bundles. ♻️
Stars: ✭ 454 (-2.16%)
Mutual labels:  webpack
Aws Google Auth
Provides AWS STS credentials based on Google Apps SAML SSO auth (what a jumble!)
Stars: ✭ 428 (-7.76%)
Mutual labels:  amazon
Blog React
react + Ant Design + 支持 markdown 的博客前台展示
Stars: ✭ 463 (-0.22%)
Mutual labels:  webpack
Cookiecutter Django Vue
Cookiecutter Django Vue is a template for Django-Vue projects.
Stars: ✭ 462 (-0.43%)
Mutual labels:  webpack
Happypack
Happiness in the form of faster webpack build times.
Stars: ✭ 4,232 (+812.07%)
Mutual labels:  webpack
Opencollective Frontend
Open Collective Frontend. A React app powered by Next.js.
Stars: ✭ 446 (-3.88%)
Mutual labels:  webpack
Soundcloud Ngrx
SoundCloud API client with Angular • RxJS • ngrx/store • ngrx/effects
Stars: ✭ 438 (-5.6%)
Mutual labels:  webpack
Webpack Parallel Uglify Plugin
A faster uglifyjs plugin.
Stars: ✭ 456 (-1.72%)
Mutual labels:  webpack
X Build
🖖 Customizable front-end engineering scaffolding tools
Stars: ✭ 436 (-6.03%)
Mutual labels:  webpack
Spike
A modern static build tool, powered by webpack
Stars: ✭ 462 (-0.43%)
Mutual labels:  webpack
Koa Webpack
Development and Hot Reload Middleware for Koa2
Stars: ✭ 429 (-7.54%)
Mutual labels:  webpack
Webpack Pwa Manifest
Progressive Web App Manifest Generator for Webpack, with auto icon resizing and fingerprinting support.
Stars: ✭ 447 (-3.66%)
Mutual labels:  webpack
React Starter Kit
React Starter Kit — front-end starter kit using React, Relay, GraphQL, and JAM stack architecture
Stars: ✭ 21,060 (+4438.79%)
Mutual labels:  webpack
Hyperstack
Hyperstack ALPHA https://hyperstack.org
Stars: ✭ 463 (-0.22%)
Mutual labels:  webpack
Ts Monorepo
Template for setting up a TypeScript monorepo
Stars: ✭ 459 (-1.08%)
Mutual labels:  webpack

S3 Plugin

Travis Badge Code Climate

This plugin will upload all built assets to s3

Install Instructions

$ npm i webpack-s3-plugin

Note: This plugin needs NodeJS > 0.12.0

Usage Instructions

I notice a lot of people are setting the directory option when the files are part of their build. Please don't set directory if you're uploading your build. Using the directory option reads the files after compilation to upload instead of from the build process.

You can also use a credentials file from AWS. To set the profile set your s3 options to the following:

s3Options: {
  credentials: new AWS.SharedIniFileCredentials({profile: 'PROFILE_NAME'})
}

s3UploadOptions default to ACL: 'public-read' so you may need to override if you have other needs. See #28

Require webpack-s3-plugin
var S3Plugin = require('webpack-s3-plugin')
With exclude
var config = {
  plugins: [
    new S3Plugin({
      // Exclude uploading of html
      exclude: /.*\.html$/,
      // s3Options are required
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        region: 'us-west-1'
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      },
      cdnizerOptions: {
        defaultCDNBase: 'http://asdf.ca'
      }
    })
  ]
}
With include
var config = {
  plugins: [
    new S3Plugin({
      // Only upload css and js
      include: /.*\.(css|js)/,
      // s3Options are required
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      }
    })
  ]
}
Advanced include and exclude rules

include and exclude rules behave similarly to Webpack's loader options. In addition to a RegExp you can pass a function which will be called with the path as its first argument. Returning a truthy value will match the rule. You can also pass an Array of rules, all of which must pass for the file to be included or excluded.

import isGitIgnored from 'is-gitignored'

// Up to you how to handle this
var isPathOkToUpload = function(path) {
  return require('my-projects-publishing-rules').checkFile(path)
}

var config = {
  plugins: [
    new S3Plugin({
      // Only upload css and js and only the paths that our rules database allows
      include: [
        /.*\.(css|js)/,
        function(path) { isPathOkToUpload(path) }
      ],

      // function to check if the path is gitignored
      exclude: isGitIgnored,

      // s3Options are required
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      }
    })
  ]
}
With basePathTransform
import gitsha from 'gitsha'

var addSha = function() {
  return new Promise(function(resolve, reject) {
    gitsha(__dirname, function(error, output) {
      if(error)
        reject(error)
      else
       // resolve to first 5 characters of sha
       resolve(output.slice(0, 5))
    })
  })
}

var config = {
  plugins: [
    new S3Plugin({
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      },
      basePathTransform: addSha
    })
  ]
}


// Will output to /${mySha}/${fileName}
With CloudFront invalidation
var config = {
  plugins: [
    new S3Plugin({
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        sessionToken: 'a234jasd'  // (optional) AWS session token for signing requests
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      },
      cloudfrontInvalidateOptions: {
        DistributionId: process.env.CLOUDFRONT_DISTRIBUTION_ID,
        Items: ["/*"]
      }
    })
  ]
}
With Dynamic Upload Options
var config = {
  plugins: [
    new S3Plugin({
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
      },
      s3UploadOptions: {
        Bucket: 'MyBucket',
        ContentEncoding(fileName) {
          if (/\.gz/.test(fileName))
            return 'gzip'
        },

        ContentType(fileName) {
          if (/\.js/.test(fileName))
            return 'application/javascript'
          else
            return 'text/plain'
        }
      }
    })
  ]
}

Options

  • exclude: A Pattern to match for excluded content. Behaves similarly to webpack's loader configuration.
  • include: A Pattern to match for included content. Behaves the same as exclude.
  • s3Options: Provide keys for upload options of s3Config
  • s3UploadOptions: Provide upload options putObject
  • basePath: Provide the namespace of uploaded files on S3
  • directory: Provide a directory to upload (if not supplied, will upload js/css from compilation)
  • htmlFiles: Html files to cdnize (defaults to all in output directory)
  • cdnizerCss: Config for css cdnizer check below
  • noCdnizer: Disable cdnizer (defaults to true if no cdnizerOptions passed)
  • cdnizerOptions: options to pass to cdnizer
  • basePathTransform: transform the base path to add a folder name. Can return a promise or a string
  • progress: Enable progress bar (defaults true)
  • priority: priority order to your files as regex array. The ones not matched by regex are uploaded first. This rule becomes useful when avoiding s3 eventual consistency issues

Contributing

All contributions are welcome. Please make a pull request and make sure things still pass after running npm run test For tests you will need to either have the environment variables set or setup a .env file. There's a .env.sample so you can cp .env.sample .env and fill it in. Make sure to add any new environment variables.

Commands to be aware of

WARNING: The test suit generates random files for certain checks. Ensure you delete files leftover on your Bucket.
  • npm run test - Run test suit (You must have the .env file setup)
  • npm run build - Run build

Thanks

  • Thanks to @Omer for fixing credentials from ~/.aws/credentials
  • Thanks to @lostjimmy for pointing out path.sep for Windows compatibility
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].