webpack配置实例

webpack.config.js

  1 const config = require('./config.json');
  2 const ExtractTextPlugin = require('extract-text-webpack-plugin');//输出单独文件插件
  3 const HtmlWebpackPlugin = require('html-webpack-plugin');
  4 const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
  5 const glob = require('glob');
  6 const path = require('path');
  7 const extractLess = new ExtractTextPlugin({
  8     filename:'styles/[name].css'
  9 });
 10 
 11 let files = glob.sync('app/view/*.html');
 12 let hwps = [];
 13 files.forEach(function(pathname){
 14     hwps.push(new HtmlWebpackPlugin({
 15         template:pathname,
 16         filename:pathname.replace('app/view/',''),
 17         css:['styles/main.css'],
 18         js:['bundle.js'],
 19         inject: true
 20     }));
 21 });
 22 
 23 
 24 module.exports = {
 25     devtool: 'eval-source-map',
 26     entry:  __dirname + "/app/main.ts",//已多次提及的唯一入口文件
 27     output: {
 28       path: __dirname + "/public",//打包后的文件存放的地方
 29       filename: "scripts/bundle.js"//打包后输出文件的文件名
 30     },
 31     devServer: {
 32         contentBase: "./public",//本地服务器所加载的页面所在的目录
 33         historyApiFallback: true,//不跳转
 34         inline: true,//实时刷新
 35         port: 6969
 36     },
 37     module:{
 38         rules:[
 39             {
 40                 test:/(.ts)$/,
 41                 use:'ts-loader'
 42             },
 43             {
 44                 test:/.less$/,
 45                 use:extractLess.extract({
 46                     fallback:'style-loader',
 47                     use:[
 48                         {
 49                             loader:'css-loader',
 50                             options:{
 51                                 importLoaders: 1,
 52                                 sourceMap:true
 53                                 //minimize: true //压缩css
 54                             }
 55                         },
 56                         {
 57                             loader:'postcss-loader',
 58                             options:{
 59                                 plugins:[
 60                                     require('autoprefixer')()
 61                                 ],
 62                                 sourceMap: 'inline'
 63                             }
 64                         },
 65                         {
 66                             loader:'less-loader',
 67                             options:{
 68                                 sourceMap:true
 69                             }
 70                         }
 71                     ]
 72                 })
 73             },
 74             {
 75                 test:/.(png|jpe?g|gif)$/,
 76                 use:[
 77                     {
 78                         loader:'url-loader',
 79                         options:{
 80                             limit:8192,
 81                             name:'/assets/images/[name].[ext]'
 82                         }
 83                     }
 84                 ]
 85             },
 86             {
 87                 test:/.html$/,
 88                 use:['html-loader']
 89             },
 90             {
 91                 test:/.svg$/,
 92                 use:[
 93                     {
 94                         loader:'url-loader',
 95                         options:{
 96                             limit:8192,
 97                             name:'/assets/svgs/[name].[ext]'
 98                         }
 99                     }
100                 ]
101             },
102             {
103                 test:/.(ttf|woff2|eot|woff)($|?)/,
104                 use:[
105                     {
106                         loader:'file-loader',
107                         options:{
108                             name:'assets/fonts/[name].[ext]'
109                         }
110                     }
111                 ]
112             }/* ,
113             {
114                 test: /.tmpl/,
115                 loader: "templatejs-loader",
116                 query: {
117                     sTag: '<#',
118                     eTag: '#>',
119                     expression: 'require("template_js")'
120                 }
121             } */
122         ]
123     },
124     plugins:[
125         extractLess,
126         ...hwps,
127         require('autoprefixer')
128         //new UglifyJSPlugin()  //压缩js
129     ],
130     resolve:{
131         extensions:['.ts','.js']//忽略后缀
132     }
133 };

package.json

 1 {
 2   "name": "xinanguoji",
 3   "version": "1.0.0",
 4   "description": "",
 5   "main": "index.js",
 6   "scripts": {
 7     "test": "echo "Error: no test specified" && exit 1",
 8     "server": "webpack-dev-server"
 9   },
10   "author": "m_y",
11   "license": "ISC",
12   "devDependencies": {
13     "autoprefixer": "^7.1.5",
14     "css-loader": "^0.28.7",
15     "extract-text-webpack-plugin": "^3.0.1",
16     "file-loader": "^1.1.5",
17     "html-loader": "^0.5.1",
18     "html-webpack-plugin": "^2.30.1",
19     "less": "^3.0.0-alpha.3",
20     "less-loader": "^4.0.5",
21     "postcss-loader": "^2.0.8",
22     "style-loader": "^0.19.0",
23     "templatejs-loader": "^0.1.1",
24     "ts-loader": "^2.3.7",
25     "typescript": "^2.5.3",
26     "uglifyjs-webpack-plugin": "^1.0.0-beta.3",
27     "url-loader": "^0.6.2",
28     "webpack": "^3.7.1",
29     "webpack-dev-server": "^2.9.2"
30   },
31   "dependencies": {
32     "bootstrap": "^3.3.7",
33     "template_js": "0.6.1"
34   }
35 }