完整的基础篇笔记PDF下载,完全手打有用的话请给个赞呗Thanks♪(・ω・)ノ
传统开发问题
模块化
含义:把单独的一个功能封装到一个模块(文件)中,模块之间相互隔离,可以通过特定的接口公开内部成员,也可以依赖别的模块
好处:方便代码重用,提升开发效率,方便后期维护
定义:
node.js中通过babel使用es6模块化
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
npm install --save @babel/polyfill
const presets = [
["@babel/env",{
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1"
}
}]
];
module.exports = { presets };
npx babel-node index.js
//m1.js
let a = 10;
let c = 20;
//不对外界暴露
let d = 30;
function show() {
console.log('m1test')
}
export default {
a,
b,
show,
};
//index.js
import m1 from './m1.js';
console.log(m1);
m1.show();
//输出{ a: 10, c: 20, show: [Function: show] }
//m1.js
export let s1 = '111';
export let s2 = '222';
export function say() {
console.log('hello world!');
}
//index.js 可以与默认导入同时存在import m1,{ s1, s2 as ss2, say} from './m1.js';
import { s1, s2 as ss2, say} from './m1.js';
console.log(s1);
console.log(ss2);
console.log(say());
/* 结果
111
222
hello world!
*/
直接导入并执行模块代码
使用场景:只想单纯执行某个模块中的代码,并不需要得到模块中向外暴露的成员
//m1.js 没有方法,只有代码片段
for (let i = 0; i < 3; i++) {
console.log(i);
}
//直接导入并执行代码
import './m1.js'
/* result
0
1
2 */
前端项目构建工具(打包工具)友好的模块化支持,处理js兼容问题,性能优化
npm init -y
新建src源代码目录
src下新建index.html
初始化首页基本结构(导入webpack打包之后的包)
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<script src="../dist/main.js">script>
head>
<body>
<ul>
<li>这是第1个lili>
<li>这是第2个lili>
<li>这是第3个lili>
<li>这是第4个lili>
<li>这是第5个lili>
<li>这是第6个lili>
<li>这是第7个lili>
<li>这是第8个lili>
<li>这是第9个lili>
ul>
body>
html>
npm insatll jquery -S
import $ from 'jquery';
$(function () {
$('li:odd').css('backgroundColor', 'pink');
$('li:even').css('backgroundColor', 'lightblue');
});
npm install webpack webpack-cli -D
module.exports = {
mode: 'development'// mode用来指定构建模式 开发不压缩代码
}
"scripts": {
"dev": "webpack" //scripts 节点下的脚本可以通过npm run 执行
}
npm run dev
修改入口和出口,在webpack.config.js 中新增下面配置信息
const path = require('path') //导入 node.js 中专门才做路径的模块
module.exports = {
entry: path.join(__dirname,'./src/index.js'),//打包入口路径
output: {
path: path.join(__dirname,'./dist'),//输出文件存放位置
filename: 'bundle.js'//输出文件名称
}
}
每次更新代码后都需要重新打包
npm install webpack-dev-server -D
"scripts": {
"dev": "webpack-dev-server" //scripts 节点下的脚本可以通过npm run 执行
}
npm run dev
备注
将src目录下的index.html页面复制到根目录,浏览器访问时直接访问首页
npm install html-webpack-plugin -D
//导入页面生成预览插件 得到构造函数
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin({//创建插件实例对象
template: './src/index.html',//指定用到的模板文件
filename: 'index.html' //指定生成文件名称 改文件存在于内存中 在目录中不显示
})
module.exports = {
plugins: [ htmlPlugin ] //plugins 数组是webpack打包期间会用到的一些插件列表
}
package.json配置
// --open 打包完成后自动打开浏览器
// --host 配置IP地址
// --port 配置端口
"scripts": {
"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8080" //scripts 节点下的脚本可以通过npm run 执行
}
webpack默认只打包处理 .js 后缀名的结尾的模块,其他模块需调用loader加载器才能正常打包,否则会报错
例如:
li{
list-style: none;
}
import './css/1.css';
npm i style-loader css-loader -D
module: {
rules: [
{ test: /\.css$/,use: ['style-loader','css-loader'] }
]
}
test 匹配文件类型(正则)use 表示对应调用的 loader
use 中配置的加载器顺序是固定的
npm i less-loader less -D
module: {
rules: [
{ test: /\.less$/,use: ['style-loader','css-loader','less-loader'] }
]
}
npm i sass-loader node-sass -D
module: {
rules: [
{ test: /\.sass$/,use: ['style-loader','css-loader','sass-loader'] }
]
}
npm i postcss-loader autoprefixer -D
const autoprefixer = require('autoprefixer')//导入自动添加前缀的插件
module.exports = {
plugins: { autoprefixer } //挂载插件
}
module: {
rules: [
{ test: /\.css$/,use: ['style-loader','css-loader','postcss-loader'] }
]
}
npm i url-loader file-loader -D
module: {
rules: [
{
test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
use: 'url-loader?limit=16940'
}
]
}
? 之后是loader的参数项
limit 用来指定图片的大小,单位是字节(byte),之后小于limit大小的图片,才会被转为base64图片
npm i babel-loader @babel/core @babel/runtime -D
npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
module.exports = {
presets: [ '@babel/preset-env' ],
plugins: [ '@babel/plugin-transform-runtime','@babel/plugin-proposal-class-properties' ]
}
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
}
]
}
问题
解决方案
<template>
<div>div>
template>
<script>
//定义组件的业务逻辑
export default {
data() {
//私有数据
return {};
},
methods: {},
};
script>
<style scoped>
/* 定义组件样式 scoped保证样式私有不冲突 */
style>
npm i vue-loader vue-template-compiler -D
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
module: {
rules: [{ test: /\.vue$/, loader: 'vue-loader' }],
},
plugins: [
//确保引入这个插件
new VueLoaderPlugin()
]
};
npm i vue -S
import Vue from 'vue'
import Vue from 'vue'
import App from './components/App.vue'
const vm = new Vue({
el: '#app',
render: h => h(App)
})
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8080",
"bulid": "webpack -p"
}
npm run bulid
用于快速生成Vue项目的基础架构
npm install -g @vue/cli
vue create my-project
vue ui
npm install -g @vue/cli-init
vue init webpack my-project
"vue": {
"devServer": {
"port": 8888,
"open": true
}
}
不推荐此方式,package.json 主要是管理包的配置信息的。为了方便维护,推荐将配置单独定义到 vue.config.js 中
module.exports = {
devServer: {
port: 8888,
open: true
}
}
一套为开发者,设计师和产品经理准备的基于 Vue 2.0 的桌面组件库
npm i element-ui -S
//导入组件库
import ElementUI from 'element-ui'
//导入组件相关样式
import 'element-ui/lib/theme-chalk/index.css'
//配置Vue插件
Vue.use(ElementUI)
vue ui