npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm
使用cnpm时出错,爆红解决
3. npm使用命令:NPM使用介绍
@xx.xx --global/ --save / --save-dev --force
npm i
模块jquery: npm i
[email protected]--global
全局安装 简写:npm i 模块 -gnpm i
模块名字 安装到本地项目的依赖中:node_modulesnpm i
模块 --save(-S)
安装模块到package.json文件中 dependencies:{} 模块:开发环境 线上环境都有npm i swiper echarts -S
--save-dev(-D)
安装模块到package.json文件中 -devDependencies 只有开发环境有,生产环境没有npm i sass --save-dev
npm install
下载当前项目依赖npm uninstall 模块名字@xx.xx
npm uninstall 模块名字 -g/-S/--save-dev
npm i 模块 -S --force 强制安装 替换之前的模块
npm update 模块名字 -S/--save-dev
npm i swiper echarts express -S
not font module express
少包了是css的预处理语言。将css赋予了动态语言的特性,如变量,继承,运算,函数
全局安装: npm install less -g
项目依赖: npm install less -save
编译在命令行窗口: less xx.less
输出编译之后的css代码到文件: less xx.less xx.css
前端项目工程化的具体解决方案
它提供了友好的前端模块化开发支持,以及代码压缩混淆,处理浏览器js的兼容性,性能优化等强大的功能。
npm i [email protected] [email protected] -D
-D 是 --save-dev的简写
-S 是 --save的简写
在项目中安装webpack
npm install [email protected] [email protected] -D
在项目中配置webpack
① 在项目更目录中,创建名为webpack.config.js的webpack配置文件,并初始化如下的基本配置:
module.exports = {
mode: "development", //mode 用来指定构建模式,可选值有development(开发)和production(运行)
};
② 在package.json的script节点下,新增dev脚本如下:
"scripts": {
"dev": "webpack" //script节点下的脚本,可以通过npm run 执行。例如npm run dev
},
mode节点的可选值有两个:
1. development
① 开发环境
②不会对打包生成的文件进行代码压缩和性能优化
③打包速度快,适合在开发阶段使用
2. production
① 生产环境
② 会对打包生成的文件进行代码压缩和性能优化
③打包速度很慢,适合在发布阶段使用
webpack.config.js是webpack的配置文件。webpack在真正开始打包构建之间,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。
注意:由于webpack是基于node。js开发出来的打包工具,因此在它的配置文件中,支持使用node.js相关的语法和模块进行webpack的个性化配置
在webpack 4.x 和 5.x 的版本中,有如下的默认约定:
① 默认的打包入口文件为src ->index.js
② 默认的输出文件路径为dist -> main.js
注意: 可以在webpack.config.js中修改打包的默认约定
在webpack.config.js配置文件中,通过entry节点指定打包的入口。通过output节点指定打包的出口。
const path = require('path') //导入node.js 中专门操作路径的模块
module.exports = {
mode: "development", //mode 用来指定构建模式,可选值有development(开发)和production(运行)
};
module.exports = {
entry: path.join(__dirname,'./src/index.js'), //打包入口文件的路径
output: {
path: path.join(__dirname, './dist'), //输出文件的存放路径
filename: 'bundle.js' //输出文件的名称
}
}
通过安装和配置第三方的插件,可以拓展webpack的能力,从而让webpack用起来更方便。最常用的webpack插件有:
① webpack-dev-server
- 类似于node.js阶段用到的nodemon工具
- 每当修改了源代码,webpack会自动进行项目的打包和构建
② html-webpack-plugin
- webpack中的HTML插件(类似于一个模板引擎插件)
- 可以通过此插件自定制indexhtml页面的内容。
npm install [email protected] -D
"scripts": {
"dev": "webpack serve"
},
② 再次运行npm run dev 命令,重新进行项目的打包npm install [email protected] -D
const HtmlPlugin = require('html-webpack-plugin') //导入插件,得到插件的构造函数
//new构造函数,创建插件的实例对象
const htmlPlugin = new HtmlPlugin({
template: './src/index.html', //指定源文件的存放路径
filename: './index.html' //指定复制出来的文件名和存放路径
})
module.exports = {
mode: "development", //mode 用来指定构建模式,可选值有development(开发)和 production(运行)
plugins:[htmlPlugin], //插件的数组,将来webpack在运行时,会加载并调用这些插件
}
在webpack.config.js配置文件中,可以通过devServer节点对webpack-dev-server插件进行更多的配置。示例代码如下:
devServer: {
open: true, //初次打包完成后,自动打开浏览器
host: '127.0.0.1', // 实时打包所使用的主机地址
port: 80, // 实时打包所使用的端口号
}
在pathage.json中脚本添加--open chrome
指定用浏览器打开
在实际开发过程中,webpack默认只能打包处理以.js后缀结尾的模块。其他非.js后缀名结尾的模块,webpack默认处理不了,需要调用loader加载器才可以正常打包,否则报错。
loader加载器的作用:协助webpack打包处理特定的文件模块。比如
① 运行npm i [email protected] [email protected] -D
命令,安装处理css文件的loader
② 在webpack.config.js 的module -> rules数组中,添加loader规则如下:
module: { //所有第三方文件模块的匹配规则
//文件后缀名的匹配规则
rules: [{ test: /\.css$/, use: ["style-loader", "css-loader"] }];
}
其中,test表示匹配的文件类型,use表示对应要调用的loader
注意:
① 运行npm i [email protected] [email protected] -D
命令,安装处理less文件的loader
② 在webpack.config.js 的module -> rules数组中,添加loader规则如下:
module: { //所有第三方文件模块的匹配规则
//文件后缀名的匹配规则
rules: [{ test: /\.less$/, use: ["style-loader", "css-loader","less-loader"] }];
}
① 运行npm i [email protected] [email protected] -D
命令
② 在webpack.config.js 的module -> rules数组中,添加loader规则如下:
module: { //所有第三方文件模块的匹配规则
//文件后缀名的匹配规则
rules: [{ test: /\.jpg|png|gif$/, use: "url-loader?limit=2229" }];
}
其中?之后是loader的参数项:
//定于了名为info的装饰器
function info(target) {
// 为目标添加静态属性info
target.ifon = "Person info";
}
// 为Person类应用info装饰器
@info
class Person {}
// 打印Person的静态属性info
console.log(Person.info);
安装babel-loader相关的包
① 运行npm i [email protected] @babel/[email protected] @babel/[email protected] -D
命令
② 在webpack.config.js 的module -> rules数组中,添加loader规则如下:
module: { //所有第三方文件模块的匹配规则
//文件后缀名的匹配规则
rules: [
// 注意:必须使用exclude指定排除项;因为node——modules目录下的第三方包不需要被打包
{ test: /\.js$/, use: "babel-loader", exclude: /node_modules/ },
];
}
配置babel-loader
在项目根目录下,创建名为babel.config.js的配置文件,定义Babel的配置项如下:
//声明babel可用插件
// 将来,webpack在调用babel-loder的时候,会先加载plugins插件来使用
module.exports = {
plugins: [["@babel/plugin-proposal-decorators", { legacy: true }]],
};
在package.json文件的script节点上,新增bulid命令如下:
"scripts": {
"dev": "webpack serve --open chrome",
"build": "webpack --mode production"
},
--model
是一个参数项,用来指定webpack的运行模式。production代表生产环境,会对打包生成的文件进行代码压缩和性能优化。
注意:通过--model
指定的参数项,会覆盖webpack.config.js中的model选项
在webpack.config.js配置文件的output节点中,进行如下的配置:
output: {
path: path.join(__dirname, "./dist"), //输出文件的存放路径
filename: "js/index.js", //输出文件的名称
},
修改webpack.config.js中的url-loader配置项,新增outputPath选项即可指定图片文件的输出路径:
module: {
// 处理图片路径
// 在配置url-loader的时候,多个参数之间,使用&符号进行分隔
{
test: /\.(jpg|png|gif)$/,
use: "url-loader?limit=470&outputPath=images",
},
}
为了在每次打包发布时自动清除dist目录中的旧文件,可以安装并配置clean-webpack-plugin插件:
npm install --save-dev clean-webpack-plugin
//按需导入插件,得到插件的构造函数之后
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
plugins: [
//把创建的cleanPlugin插件实例对象,挂载到plugins节点上
new CleanWebpackPlugin(),
],
};
Source Map就是一个信息文件,里面储存着位置信息。也就是说,Source Map文件中存储着压缩混淆后的代码,所对应的转换前的位置。
在webpack.config.js中配置,使得@代替src路径
resolve: {
alias: {
// 告诉webpack,程序员写的代码中,@符号表示src着一层目录
"@": path.join(__dirname, "./src"),
},
},
import msg from "@/msg.js";
console.log(msg.msg);