diff --git a/packages/cli/lib/lib/webpack/webpack-client-config.js b/packages/cli/lib/lib/webpack/webpack-client-config.js index fdceaa8d9..bdc9641cd 100644 --- a/packages/cli/lib/lib/webpack/webpack-client-config.js +++ b/packages/cli/lib/lib/webpack/webpack-client-config.js @@ -109,6 +109,11 @@ async function clientConfig(env) { from: resolve(__dirname, '../../resources/sw-debug.js'), to: 'sw-debug.js', }, + // copy files from static to build directory + existsSync(source('static')) && { + from: resolve(source('static')), + to: '.', + }, ].filter(Boolean) ), ], diff --git a/packages/cli/tests/build.test.js b/packages/cli/tests/build.test.js index cd8f4ab31..df0d25ff3 100644 --- a/packages/cli/tests/build.test.js +++ b/packages/cli/tests/build.test.js @@ -3,6 +3,7 @@ const { readFile } = require('../lib/fs'); const looksLike = require('html-looks-like'); const { create, build } = require('./lib/cli'); const { snapshot, isMatch } = require('./lib/utils'); +const { existsSync } = require('fs'); const { subject } = require('./lib/output'); const images = require('./images/build'); @@ -136,4 +137,11 @@ describe('preact build', () => { let dir = await subject('location-patch'); expect(() => build(dir)).not.toThrow(); }); + + it('should copy resources from static to build directory', async () => { + let dir = await subject('static-root'); + await build(dir); + let file = join(dir, 'build', '.htaccess'); + expect(existsSync(file)).toBe(true); + }); }); diff --git a/packages/cli/tests/subjects/static-root/index.js b/packages/cli/tests/subjects/static-root/index.js new file mode 100644 index 000000000..cbed9ced6 --- /dev/null +++ b/packages/cli/tests/subjects/static-root/index.js @@ -0,0 +1,5 @@ +import { h } from 'preact'; + +export default () => { + return