Coder Social home page Coder Social logo

webpack-s3-uploader's Introduction

S3 Uploader for Webpack

Build Status

This will upload all compiled assets to AWS S3 bucket during a webpack build process. You can serve all your files via Cloud Front or different CDN.

Installation

$ npm i -S webpack-s3-uploader

How to use it

First set environmental variables:

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

Essential webpack configuration
// require plugin 
var S3Uploader = require('webpack-s3-uploader')


const config = {
  context: path.resolve(__dirname, '..'),

  output: {
    path: path.resolve(__dirname, '../build/public/assets'),
    publicPath: 'your_cdn_url',
  },

  plugins: [
    new S3Uploader({
      s3Options: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        region: 'us-west-1',
        sessionToken: 'asdsaad' // the optional AWS session token to sign requests with
      },
      s3UploadOptions: {
        Bucket: 'MyBucket'
      },
    })
  ]
  // ..other configuration
}

It is required to set:

  • output.path is a path, where all assets will be compiled and those will be uploaded. You can use exclude and include option.
  • output.publicPath it is a path, where all compiled assets will be referenced to. During a compilation process webpack replaces local path with this one. If you have Cloud Front pointed to your S3 bucket, you should put url here.

Options

  • exclude: A Pattern to match for excluded content (e.g. /.*\.(css|js)/). Behaves similarly to webpack's loader configuration.
  • include: A Pattern to match for included content. Behaves the same as the exclude.
  • s3Options: Provide keys for upload extention of s3Config
  • s3UploadOptions: Provide upload options putObject
  • basePath: Provide the namespace where upload files on S3
  • progress: Enable progress bar (defaults true)
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.

Pathing for resources outside of output.path

Resources that are located outside of the webpack output.path directory are pathed as follows

output.path = /myproject/build/dist/bundle
const ASSET_OUTPUT_PATH =/myproject/build/assets

or

const ASSET_OUTPUT_PATH =../assets

...

rules [
  use: [
    ...,
    {
      loader: 'file-loader',
      options: {
        ...,
        outputPath: ASSET_OUTPUT_PATH
      }
    }
]

The above configuration will output to the local file system as follows

build
|
----- dest
      |
       ---- bundle.js
|
----- assets
      |
       ---- myasset.png

and will be pathed in S3 as follows

my-bucket
|
---- bundle.js
---- assets
     |
      ---- myasset.png
Acknowledgements

This is a lite and refactored version of s3-plugin-webpack

webpack-s3-uploader's People

Contributors

infinateone avatar matrus2 avatar pascalbayer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

webpack-s3-uploader's Issues

Should stop webpack build if credentials are wrong

For the time being even if AWS credentials are wrong CI/CD job is succeed. This may break the production unintentionally.
Expected: Webpack build should fail in case of wrong credentials. If so CI/CD job should fail.

Remove nsp label from README.md

NSP check seems to not working fine, so remove it completely to not to drive users to wrong conclusions.
Possible find different app to do the same.

Unwanted trailing slash added to basePath (addTrailingS3Sep should be optional ?)

Current usage

basePath set to commit hash, which is intended to be the base directory in S3.
Ex: Set basePath to de40ad249, so that every assets are uploaded into that directory

Current behavior

basePath: de40ad249
Resulting basePath: de40ad249/
Resulting Key: de40ad249//assets/scripts/vendor.js

Note the additional trailing slash automatically appended by the tool, which is effectively creating an empty directory in S3.

Desired behavior

basePath: de40ad249
Resulting basePath: de40ad249
Resulting Key: de40ad249/assets/scripts/vendor.js

Use webpack 4

Rewrite tests and README.md to be compatible with webpack 4.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.