1.npm的安裝和使用方法能夠參考
阮老師的教程
http://javascript.ruanyifeng....
2.須要一個好一點的編輯器好比vscode,webstrom ,固然使用sublime 也能夠,不過這樣就要使用window的命令行cmd 打開命令行窗口javascript
webpack_test --src |----img |----js |-----components |-----vuePages |----fonts |----css |----data |--tmp.html |--webpack.config.js |--package.json
webpack.config.jscss
let config = { } module.exports = config;
package.jsonhtml
初始化配置默認選項 $npm init -y -package.json { "name": "20180806", "version": "1.0.0", "description": "", "main": "webpack.config.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
$npm i -D webpack webpack-cli
等價於 $npm install webpack webpack-cli --save-devvue
//package.json "devDependencies": { "webpack": "^4.16.4", "webpack-cli": "^3.1.0" }
一樣的方法把webpack的各類 loader plugins安裝好,
若是按照不順利大多數多是網絡的問題,那能夠嘗試使用cnpm 也就是國內的淘寶鏡像進行安裝。不過也須要先安裝cnpm。java
package.jsonnode
$npm i -D html-webpack-plugin
webpack.config.jswebpack
const fs = require('fs'); const webpack = require('webpack'); const htmlWebpackPlugin= require('html-webpack-plugin'); let config = { ... entry:{}, ... plugins:[] ... } fs.readdirSync('./src/js').forEach(function(itm,idex){ if(/\.js$/.test(itm)){ var chunk = itm.slice(0,itm.length-3); config.entry[chunk] = './src/js/'+itm; var page = new htmlWebpackPlugin({ filename:chunk+'.html', template:'./src/index.html', chunk:[chunk] }) config.plugins.push(page) } })
output:{ path:path.resolve(__dirname,'dist'), filename:'Script/[name].js', publicPath: "./"//用於去 對於輸出的 path 裏面的引用路徑 // webpack-dev-server環境下,path、publicPath、區別與聯繫 // path:指定編譯輸出的路徑(/dist/),並非html中對js文件的引用路徑。 // publicPath:虛擬目錄,自動指向path編譯目錄, 配置html中的js文件引用路徑,一般是 publicPath+path },
$npm i -D babel-loader babel-core babel-preset-env
webpack.config.jses6
let config = { ... module:{ rules:[ { test:/\.js$/,//適配js文件才能夠使用個loader loader:'babel-loader' } ] }, ... }
配置babel-preset-env 須要新增 .babelrc json文件;web
.babelrcnpm
{ "presets": [ ["env", { "targets": { "node": "current" } }] ] }
如需知道更多,打開env在npm的文檔 :https://www.npmjs.com/package...
$npm i -D webpack-dev-server
package.json
... script:{ ... "dev":"webpack-dev-server --color --open --precess" }
這個時候在css 目錄下添加2個文件
--css --index.scss --reset.scss
//index.scss body{ font-size:20px; color:#f90; }
//reset.scss *{ border:0; margin:0; padding:0; }
//index.js import index from '../css/index.scss' import reset from '../css/reset.scss'
首先安裝:
sass-loader node-sass 解析 sass|scss
css-loader 識別css,style-loader 解析css
postcss-loader 和 autoprefixer(自動添加前綴的插件);
$npm i -D css-loader style-loader postcss-loader sass-loader node-sass extract-text-webpack-plugin@next
webpack.config.js
... let ExtractTextPlugin = require('extract-text-webpack-plugin'); let autoPrefixer = require('autoprefixer'); ... module:{ rules:[ ... { test:/\.css$/, use:ExtractTextPlugin.extract({ publicPath:'../',//這裏的公共路徑,來配置css中圖片及其餘的引用文件路徑 fallback:'style-loader' loader:['css-loader',{ loader:'postcss-loader', options: { plugins: [ autoPrefixer() ] } },'sass-loader'] }) } ] }, plugins:[ ... new ExtractTextPlugin('Style/[name].css'), ]
之前2.0版本的時候用的是
new webpack.optimize.CommonsChunkPlugin(options);
到如今4.0版本改用
config.optimization.splitChunks
新建
js --main.js --components basic.js css main.scss
//basic.js console.log('basic.js!!!')
//main.js import reset from '../css/reset.scss' import index from '../css/main.scss' import basic from './components/basic' console.log('index.js!!!')
//index.js import reset from '../css/reset.scss' import index from '../css/index.scss' import basic from './components/basic' console.log('index.js!!!')
//main.scss .showimg{ height: 400px; width:400px; background:url(../img/2.gif) no-repeat; background-size: 100%; }
webpack.config.js
... optimization:{ splitChunks: { cacheGroups: { commons: { // test:/[\\/]node_modules[\\/]/, name: "commons", chunks: "initial", minChunks: 2 } } } } ...
如想在 html 插入圖片文件
能夠使用 webpack的html變量語法
<img src="<%=require('./img/1.jpg')%>" alt="">
若是是在css裏面的圖片方法以下:
$npm i -D url-loader file-loader
webpack.config.js
... { test:/\.jpe?g|gif|png|svg|bmp$/, use:[{ loader:'url-loader', options:{ limit:8192, name:'Images/[name].[ext]', //publicPath:'../'//這裏的publicPath 能夠單獨配置圖片的引用路徑 } }] }
webpack.config.js
... { test:/\.(woff2?|eot|svg|ttf)$/, use: [{ loader: 'file-loader', options: { name: 'Fonts/[name]-[hash].[ext]', // publicPath: "../"在output或者css配置module那設置了publicPath 這裏就不須要設置 } }] }