CommonJS
例:
a.js
let a = 10
let b = 20
module.exports = {
a,b
}
b.js
const a = require('./a.js')
console.log(a)
ES Module把一个文件当作一个模块,每个模块有自己的独立作用域,那如何把每个模块联系起来呢?
核心点就是模块的导入(import)与导出(export)。
如上代码 我们把它改造成ES6格式
let a = 10
let b = 20
export default {
a,b
}
b.js
import a from './a.js'
console.log(a)
注意
a.js
export let a = 10
b.js
import {
a} from './a.js'
console.log(a)
a.js
for (let i = 0; i < 5; i++) {
console.log(i)
}
b.js
import './a.js'
npm install webpack webpack-cli --save-dev
npm install webpack webpack-cli -D
在当前目录下创建一个webpack.config.js
文件
module.exports={
mode:'development' //开发模式
mode:'production' // 生产模式
}
然后在packpage.json中的scripts中写入
"dev":"webpack"
最后在终端中运行命令
npm run dev
默认打包src目录下的index.js
入口文件
就是项目或程序被请求的时候,第一个被访问到的文件,此文件再找相对应的模块进行处理
在当前项目中,index.html 是入口文件,因为我们请求的就是 index.html
但是对于 webpack 来说,打包的入口文件是 index.js,因为 index.js 中引入了其他程序需要的模块,并编写了相应的逻辑代码
出口文件
打包之后的文件目录以及名称
webpack 有一些默认配置
webpack.config.js
const path = require('path')
module.exports = {
// mode:'development'
mode: 'production',
entry: path.resolve(__dirname, 'src/app.js'), // 入口文件
output: {
path: path.resolve(__dirname, 'dist'), //出口文件
filename: 'bundle.js' // 打包后文件名
}
}
使用 webpack-dev-server
webpack-dev-server
为你提供了一个简单的 web server,并且具有 live reloading(实时重新加载) 功能。
安装:
npm install --save-dev webpack-dev-server
修改package.json中的启动命令
"dev":"webpack serve"
之后运行
npm run dev
注意:
localhost:8080
当前存在的问题:localhost:8080 对应的是网站跟目录,index.html 在 src 目录下,访问起来比较麻烦
解决方案:可以将 src 目录下的 index.html 拷贝一份到根目录下,这样访问 localhost:8080 时,就会默认渲染 index.html
但是如果修改完 index.html 后还需要手动拷贝比较麻烦,可以使用插件:
HtmlWebpackPlugin
安装:
npm install --save-dev html-webpack-plugin
然后我们需要在webpack.config.js中 引入
const HtmlWebpackPlugin = require('html-webpack-plugin');
同时我们需要安装
npm i loader-utils -D
配置HtmlWebpackPlugin
const htmlPlugins = new HtmlWebpackPlugin({
template:'./src/index.html', //要拷贝的文件
filename:'index.html' // 拷贝到哪里
})
plugins: [htmlPlugins]
之后逆行 npm run dev即可
但是根目录下并没有index.html 因为依然创建在内存中
webpack-dev-serve:
html-webpacl-plugin:
webpack 默认只能打包 .js 模文件,其他静态文件,如 .css,图片等默认不能处理,如果不加载对应的加载器,则会报错
webpack 支持使用 loader 对文件进行预处理。你可以构建包括 JavaScript 在内的任何静态资源。
安装加载器
npm install --save-dev css-loader style-loader
配置 webpack.config.js
module:{
rules:[
{
test:/\.css$/,use:['style-loader','css-loader']}
]
}
loader 的调用是从后往前掉
安装
npm install less-loader less -D
配置
{
test:/\.less$/,use:['style-loader','css-loader','less-loader']}
之后重新打包即可
安装
npm i file-loader url-loader -D
配置
{
test: /\.png$/,
use: [{
loader: 'url-loader', //使用url-loader处理打包图片
options:{
limit:10750
}
}]
}
安装
npm install -D babel-loader @babel/core @babel/preset-env
webpack.config.js 中添加如下规则
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/, //排除作用 node_modules下不要处理
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'], //处理方式
}
}
}
在index.js中写入
class Person{
static age = 10
}
console.log(Person.age)
完成后我们执行打包命令 npm run dev
之后我们发现会报错 错误原因在于没有安装babel语法的相关插件
安装:
npm i -D @babel/plugin-proposal-class-properties
然后在上面规则的 option 属性中添加配置
plugins: ['@babel/plugin-proposal-class-properties'] // 新加的配置