{"_id":"@artsy/bucket-assets","_rev":"16-9aafad58050b3c9bca46d59cd92d9419","name":"@artsy/bucket-assets","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.3":{"name":"@artsy/bucket-assets","version":"1.0.3","keywords":["s3","assets","bucket"],"author":{"url":"http://craigspaeth.com","name":"Craig Spaeth","email":"craigspaeth@gmail.com"},"_id":"@artsy/bucket-assets@1.0.3","maintainers":[{"name":"alloy","email":"eloy.de.enige@gmail.com"},{"name":"zephraph","email":"zephraph@gmail.com"},{"name":"arjelks","email":"ashley.jelks@artsymail.com"},{"name":"artsy-engineering","email":"opensource@artsymail.com"},{"name":"erikdstock","email":"erik.d.stock@gmail.com"},{"name":"xtina-starr","email":"c.thompsonms@gmail.com"},{"name":"l2succes","email":"l2succes@gmail.com"},{"name":"damassi","email":"damassi.pappas@gmail.com"},{"name":"anandaroop","email":"anandaroop.roy+npm@gmail.com"},{"name":"yuki24","email":"yk.nishijima@gmail.com"},{"name":"orta","email":"orta.therox@gmail.com"},{"name":"mzikherman","email":"mzikherman@gmail.com"},{"name":"oxaudo","email":"oxaudo@yahoo.com"},{"name":"eessex","email":"eve@artsymail.com"}],"contributors":[{"url":"http://brennanmoore.com","name":"Brennan Moore","email":"brennanmoore@gmail.com"}],"bin":{"bucket-assets":"./bin/bucket-assets.js"},"dist":{"shasum":"0b3139b736b19845fffb741d86926483a900f653","tarball":"https://registry.npmjs.org/@artsy/bucket-assets/-/bucket-assets-1.0.3.tgz","fileCount":22,"integrity":"sha512-fH2waIkV/v/ypMHt+lZTnRFG8tV8DRO5wSkmQhSYqiQgqCqdzfCFia0hCU7x9b2o90eez4hgfPtIuS3jlmqDjg==","signatures":[{"sig":"MEUCIGgcJ9BWNXnUftvBsCndDaxph6IL2JePEthKNYjk1qzBAiEAiipRfO2Ee/gCHehfvmrjojXGcZ4X6/l4ntSw07YmjYw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+S6rCRA9TVsSAnZWagAAbGoQAJjSX8Yo5xvO5w38Yajs\nEsrOIPCzVeDWISARVi9HxZKDC0dFEL5VewB2DuCMtWZNACYBaFgkdcKMiPo+\n81JI797FYaHzTy2TPrrFQiQCk/NuExC8lQeYiHEMolvf9E0jTXVEaWGmwI/4\n+s3sPKPW6b/doYHzNVUQcgyIzhgcAHjPhVASa5kTAJOsM1e58rf2R85l/+1y\n5RwcwmI4y5VYvWI+kyCvU9jufCiZIK7iPqOBfVLF8S1KLH/T8I6BNqL+l53p\nr9qwyjp/h69CTa+esgVgd2/NzzeKHifLHjHN9Zg1bJfHUaOPz7rnstTSl13/\nNrs8KDov8hOQKcHjNTgrIadjFK+1gIRFz7l7Sbn0m0PzVKXp41N5+ppwwpgl\nfGQ0yfVRjegjA6JUs9M0ANH3usIZoxg+osj1fdoLJRxOhHiHZwcktVhHxamx\nk13Vw67caUq3eB+b8wLQk4A9UzWSGCBDwrEXELgLP6vpEBatjjHt4I7Fv2uF\nZuttEYNd1F6qTLYOZh/0TPX4donXVGSuePQmGD81Dz1RE6myuqXsF+x36UUe\n9oxkJxSuP14HQUlQ/TvpYjTkxRM78KDQPpOMa81D8TmfAf1KlZhjLSfBs8vQ\nssxGIok7aAsTm83kyKFPxRnUQG3umIv0zzjyGLlUOa0ztzuWxQP/plyGuJXb\noI3X\r\n=aO5s\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">= 0.10.x"},"gitHead":"29165286e770b2c7359a079f77378ca601ef49b7","scripts":{"test":"mocha test/test.js -r should","example":"./bin/bucketassets.js && node example/app.js"},"_npmUser":{"name":"artsy-engineering","email":"opensource@artsymail.com"},"_npmVersion":"6.4.1","description":"Uploads a folder of static assets to an s3 bucket with convenient assumptions.","directories":{},"_nodeVersion":"10.15.0","dependencies":{"glob":"^5.0.5","mime":"^1.3.4","async":"^0.9.0","knox-s3":"^0.9.5","commander":"^2.8.1","superagent":"^1.2.0","underscore":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"jade":"^1.9.2","mocha":"^2.2.4","sinon":"^1.14.1","rewire":"^2.3.3","should":"^6.0.1","express":"^4.12.3"},"_npmOperationalInternal":{"tmp":"tmp/bucket-assets_1.0.3_1559834282346_0.56539752460038","host":"s3://npm-registry-packages"}}},"time":{"created":"2019-06-06T15:18:02.317Z","modified":"2025-11-18T23:31:25.622Z","1.0.3":"2019-06-06T15:18:02.509Z"},"author":{"url":"http://craigspaeth.com","name":"Craig Spaeth","email":"craigspaeth@gmail.com"},"keywords":["s3","assets","bucket"],"description":"Uploads a folder of static assets to an s3 bucket with convenient assumptions.","contributors":[{"url":"http://brennanmoore.com","name":"Brennan Moore","email":"brennanmoore@gmail.com"}],"maintainers":[{"email":"opensource@artsymail.com","name":"artsy-engineering"},{"email":"anandaroop.roy+npm@gmail.com","name":"anandaroop"},{"email":"mzikherman@gmail.com","name":"mzikherman"},{"email":"dblandin@gmail.com","name":"dblandin"},{"email":"joey@artsymail.com","name":"joeyaghion"}],"readme":"# bucket-assets\n\nUploads a folder of static assets to an s3 bucket with convenient features. These include:\n\n* Fingerprints asset package based on file contents\n* Uploads a manifest file that stores a git hash to make rollback easy (first checks for the manifest stored in the ASSET_MANIFEST env variable, then checks the COMMIT_HASH env variable, then runs a `git rev-parse HEAD`)\n* Provides middleware to easily point to your uploaded assets\n* Adds appropriate s3 headers like setting files to 'public-read' and 'Content-Type'.\n\nBucket Assets is used in deploys of Artsy apps, but may be useful for you too.\n\n## Example\n\nRun the CLI in your deployment process.\n_You may omit these arguments if you use the defaults below._\n\n````\nbucket-assets \\\n  --files **/public/** \\\n  --secret s3-secret \\\n  --key s3-key \\\n  --bucket force-production \\\n  --fingerprint true\n````\n\nAdd the middleware to your app\n\n````javascript\nvar bucketAssets = require('bucket-assets');\napp.use(bucketAssets({\n\n  // Glob that defaults to finding all files in \"public\" folders that\n  // are children of process.cwd() e.g. /public + /components/modal/public.\n  // Will always ignore public folders in node_modules.\n  files: __dirname + '/**/public/**',\n\n  // Defaults to \"public\". The name of the folder that is the root static\n  // directory so relative paths work the same locally as they do on the CDN.\n  root: 'public',\n\n  // Defaults to process.env.S3_KEY\n  key: 's3-key',\n\n  // Defaults to process.env.S3_SECRET\n  secret: 's3-secret',\n\n  // Defaults to process.env.S3_BUCKET\n  bucket: 'force-production',\n\n  // Defaults to process.env.CDN_URL\n  cdnUrl: '//xyz.cloudfront.net/',\n\n  // Defaults to true. Use `false` to not use fingerprinting.\n  fingerprint: true\n}));\n````\n\nUse the view helper to point to the fingerprinted CDN assets in production or staging.\n\n````jade\nhead\n  link( type='text/css', rel='stylesheet', href=asset('main.css') )\nbody\n  script( src=asset('main.js') )\n````\n\n## With Heroku\n\nBe sure to set env variables for production/staging if you're relying on the defaults\n\nOn your CI machine\n````\nS3_KEY=\nS3_SECRET=\n````\n\nRun with deploy script\n````\nheroku config:set ASSET_MANIFEST=$(cat manifest.json)\n````\n\nSet once\n````\nheroku config:set CDN_URL=\n````\n\n## Contributing\n\nPlease fork the project and submit a pull request with tests. Install node modules `npm install` and run tests with `npm test`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}