Webpack.config如何将index.html复制到dist文件夹

我正试图自动进入/ dist的资产。 我有以下config.js:

module.exports = { context: __dirname + "/lib", entry: { main: [ "./baa.ts" ] }, output: { path: __dirname + "/dist", filename: "foo.js" }, devtool: "source-map", module: { loaders: [ { test: /\.ts$/, loader: 'awesome-typescript-loader' }, { test: /\.css$/, loader: "style-loader!css-loader" } ] }, resolve: { // you can now require('file') instead of require('file.js') extensions: ['', '.js', '.json'] } } 

我也想在运行webpack的时候,把main.html放在/ dist目录下。 我怎样才能做到这一点?

UPDATE 1 2017_____________

我现在最喜欢的方式是使用带模板文件的html-webpack-plugin 。 感谢接受的答案呢! 这种方式的好处是,索引文件也将join开箱即用的js链接!

选项1

在你的index.js文件(即webpack条目)中,通过file-loader插件向你的index.html添加一个require,例如:

require('file?name=[name].[ext]!../index.html');

一旦你用webpackbuild立你的项目, index.html将在输出文件夹中。

选项2

使用html-webpack-plugin来避免有一个index.html。 只需要webpack为你生成文件。

我会给VitalyB的答案增加一个选项:

选项3

通过npm。 如果你通过npm运行你的命令,那么你可以把这个设置添加到你的package.json中(也可以查看webpack.config.js)。 为了开发运行npm start ,在这种情况下不需要复制index.html,因为web服务器将从源文件目录运行,并且bundle.js将从同一个地方可用(bundle.js将存储在内存中只是,但将可用,如果它是与index.html一起位于)。 对于生产运行npm run build和dist文件夹将包含您的bundle.js和index.html复制与良好的旧的cp命令,如下所示:

 "scripts": { "test": "NODE_ENV=test karma start", "start": "node node_modules/.bin/webpack-dev-server --content-base app", "build": "NODE_ENV=production node node_modules/.bin/webpack && cp app/index.html dist/index.html" } 

更新:选项4

有一个copy-webpack插件 ,如在这个Stackoverflow答案中所述

但通常情况下,除了“第一”文件(如index.html)和较大的资产(如大型图像或video)之外,通过require在您的应用程序中直接包含css,html,图像等,webpack将包括你(当然,你使用装载机和可能的插件正确设置它之后)。

你可以使用CopyWebpackPlugin 。 它的工作就像这样:

 module.exports = { plugins: [ new CopyWebpackPlugin([{ from: './*.html' }]) ] } 

我会说答案是:你不能。 (或者至less:你不应该)。 这不是Webpack应该做的事情。 Webpack是一个捆绑器,不应该用于其他任务(在这种情况下:复制静态文件是另一个任务)。 你应该使用像Grunt或Gulp这样的工具来完成这样的任务。 将Webpack作为Grunt任务或Gulp任务进行集成是非常常见的。 他们都有其他的复制文件的工作,例如grunt-contrib-copy或gulp-copy 。

对于其他资产(不是index.html ),您可以将它们与Webpack捆绑在一起(这正是Webpack的用途)。 例如, var image = require('assets/my_image.png'); 。 但是我认为你的index.html不需要成为bundle的一部分,因此它不是捆绑器的工作。

这在Windows上运行良好:

  1. npm install --save-dev copyfiles
  2. package.json我有一个复制任务: "copy": "copyfiles -u 1 ./app/index.html ./deploy"

这将我的index.html从app文件夹移动到deploy文件夹中。