npm init -y
npm i -D webpack webpack-cli
创建src文件夹 index.js
打包生成的文件是个自执行函数,传入给函数中 modules 的值是个对象,key: value ```javascript {“./src/index.js”: /*/ (function(module, exports, webpack_require) { 因为又引入了test.js文件 传了webpack_require函数
eval(“console.log(‘hello 你好aaaaaaaaaa’)\r\nconst test = webpack_require(/! ./test.js / \”./src/test.js\”)\r\nconsole.log(test)\n\n//# sourceURL=webpack:///./src/index.js?”);
/*/ }) }
/**/ function webpack_require(moduleId) { moduleId => key
/**/
/**/ // Check if module is in cache
// 在缓存中 直接返回
/**/ if(installedModules[moduleId]) {
/**/ return installedModules[moduleId].exports;
/**/ }
/**/ // Create a new module (and put it into the cache)
/**/ var module = installedModules[moduleId] = {
/**/ i: moduleId,
/**/ l: false,
/**/ exports: {}
/**/ };
/**/
/**/ // Execute the module function
// call 就是执行
/**/ modules[moduleId].call(module.exports, module, module.exports, webpack_require);
/**/
/**/ // Flag the module as loaded
/**/ module.l = true;
/**/
/**/ // Return the exports of the module
/**/ return module.exports;
/**/ }
- npx webpack --config webpack.config.my.js
- npm run build -- --config webpack.config.my.js -- 后面的参数变成字符串
```javascript
npm i -D webpack-dev-server
devServer: {
port: 3000,
progress: true,
contentBase: './dist',
compress: true
}
output: {
filename: 'bundle.[hash:8].js',// 只显示8位
path: path.resolve('build')
},
配置loader
modelues: {
rules: [
{
test: '/.css$/',
use: [{
loader: 'style-loader',
options: {
insert: 'top'
}
}, 'css-loader']
},
{
test: /.css$/,
use: [
MiniCssExtractPlugin.loader // 抽离css 单独文件
, 'css-loader']
},
{
test: /.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'less-loader'
]
}
]
}
自动添加浏览器前缀
npm i -D postcss-loader autoprefixer
js高级语法=> es5
{
test: /.js$/,
use: {
loader: 'babel-loader',
options: {
// 用babel-loader es6=> es5
presets: [// 大插件库 里面有模块处理
'@babel/preset-env'
],
plugins: [
'@babel/plugin-proposal-class-properties'
]
}
}
},
- @babel/plugin-transform-runtime ,解决 ,正常es6转es5 ,不能解析 promise 或者 generator 语法,这是内置的。
- 安装 @babel/runtime —save , exclude : /node_modules/
实例上的语法 includes 不能解析 需要引入 @babel/polyfill —save , require(‘@babel/polyfill)’)
{
test: /.js$/,
use: {
loader: 'eslint-loader',
options: {
enforce: 'pre' // previous 正常是从下到上执行, 加上会先执行
}
},
include: path.resolve('src'),
exclude: /node_modules/
},