Vue.js (vuejs.org)
Bootstrap可视化布局系统 (bootcss.com)
MyBatis入门学习-KuangStudy-文章
鼠标悬停几秒钟查看此处动态绑定的提示信息!
我是标题
A
B
C
who
-
{{ item.message }}
v-on
指令 (简写为 @
) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript(方法、函数)。
狂神说java
性别:男
女
选中的是:{{kuangshen}}
狂神说java
案例2:
狂神说java
与vue的关系:
{
"name":"狂神说java",
"url": "http://baidu.com",
"page": "1",
"isNonProfit":"true",
"address": {
"street": "含光门",
"city":"陕西西安",
"country": "中国"
},
"links": [
{
"name": "B站",
"url": "https://www.bilibili.com/"
},
{
"name": "4399",
"url": "https://www.4399.com/"
},
{
"name": "百度",
"url": "https://www.baidu.com/"
}
]
}
狂神说Java
狂神说Java
狂神说Java
{{message}}
{{currentTime1()}}
{{currentTime2}}
狂神说Java
使用自定义的数据
狂神说Java
{
// 项目/模块名称,长度必须小于等于 214 个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母
"name": "myvue",
// 项目版本
"version": "1.0.0",
// 项目描述
"description": "project",
// 作者
"author": "Demo_Null",
// 是否私有,设置为 true 时,npm 拒绝发布
"private": true,
// 执行 npm 脚本命令简写,执行前面的简写就代表执行后面的命令
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
"build": "node build/build.js"
},
// 生产环境下,项目运行所需依赖
"dependencies": {
"vue": "^2.5.2",
"vue-router": "^3.0.1"
},
// 开发环境下,项目所需依赖
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^21.0.2",
"babel-loader": "^7.1.1",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
// 项目运行的平台
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
// 供浏览器使用的版本列表
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
'use strict' //---严格的语法
const path = require('path') //---node.js路径模块
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static', //---配置静态目录的地方。相当于tomcat目录中的web-info目录。
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, //---配置端口号
autoOpenBrowser: false,//项目运行时是否自动打开浏览器
errorOverlay: true,// 浏览器错误提示
notifyOnErrors: true,// 跨平台错误提示
poll: false, // 使用文件系统获取文件改动的通知devServer.watchOptions https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: false,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map', // 增加调试,该属性为原始源代码
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true, // 使缓存失效
cssSourceMap: true // 代码压缩后bug定位将非常困难,引入SourceMap记录压缩前后的位置信息记录,当产生错误时直接定位到压缩前的位置
},
//生产环境
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),// 编译输入的index.html文件
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),// 编译输出的静态资源路径(项目打包时的文件)
assetsSubDirectory: 'static',// 编译输出的二级目录
assetsPublicPath: '/',// 编译发布的根目录,可配置为资源服务器域名或CDN域名
/**
* Source Maps
*/
productionSourceMap: true, // 是否开启cssSourceMap
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map', // 增加调试,该属性为原始源代码
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,// 是否开启gzip
productionGzipExtensions: ['js', 'css'], // 需要使用gzip压缩文件的扩展名
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report // 打包分析
}
}
//原文链接:https://blog.csdn.net/yhj198927/article/details/124044693
'use strict' //---严格模式
require('./check-versions')() //---npm和node版本检查并立即执行,请看我的check-versions配置文件解释文章
process.env.NODE_ENV = 'production' //---process是node中的global全局对象的属性,process是node中的全局变量,env设置环境变量。此设置环境为生产环境production
const ora = require('ora') //---ora是一个命令行转圈圈动画插件,好看用的
const rm = require('rimraf') //---rimraf插件是用来执行UNIX命令rm和-rf的用来删除文件夹和文件,清空旧的文件
const path = require('path') //---node.js路径模块
const chalk = require('chalk') //---chalk插件,用来在命令行中输入不同颜色的文字
const webpack = require('webpack') //---引入webpack模块使用内置插件和webpack方法
const config = require('../config') //---引入config下的index.js配置文件,此配置文件我之前介绍了请自行查阅,主要配置的是一些通用的选项
const webpackConfig = require('./webpack.prod.conf') //---下面是生产模式的webpack配置文件,请看我的webpack.prod.conf解释文章
const spinner = ora('building for production...') //---开启转圈圈动画
spinner.start() //---开始执行加载动画
//---调用rm方法,第一个参数的结果就是 dist/static,表示删除这个路径下面的所有文件
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err //---如果删除的过程中出现错误,就抛出这个错误,同时程序终止
webpack(webpackConfig, (err, stats) => { //---没有错误,就执行webpack编译
//---这个回调函数是webpack编译过程中执行
spinner.stop() //---停止转圈圈动画
if (err) throw err //---如果有错误就抛出错误
process.stdout.write(stats.toString({ //---没有错误就执行下面的代码,process.stdout.write和console.log类似,输出对象
//---stats对象中保存着编译过程中的各种消息
colors: true, //---增加控制台颜色开关
modules: false, //---不增加内置模块信息
children: false, //---不增加子级信息
chunks: false, //---允许较少的输出
chunkModules: false //---不将内置模块的信息加到包信息
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
//---以上就是在编译过程中,持续打印消息
//---下面是编译成功的消息
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
// end
// 注: 如果你想自己编写一个高质量的脚手架工具,建议你:
// 去补习nodejs,然后补习 es6,然后再来看webpack官方文档,然后自己独立编写一个和vue-cli类似的脚手架,如果上面的东西看不懂,更要这样做
// vue-cli还有一部分内容是关于代码测试的,可以说这块内容的复杂度不亚于webpack,这些内容对nodejs要求比较熟悉,说白了就是基础弱的很难入门,但是测试这块内容也是非常有价值的,可以借助无界面的浏览器解析引擎,通过一句命令就可以把你的代码在不同的平台上运行,还能指出问题所在,所以,我会渐渐的转战nodejs去了,后续的文章将很多是关于nodejs的文章,如果感兴趣的可以关注我的文章,一起学习探讨
//原文链接:https://blog.csdn.net/song854601134/article/details/120598334
'use strict'
const path = require('path') //---引入nodejs路径模块
const utils = require('./utils') //---引入utils工具模块,具体查看我的博客关于utils的解释,utils主要用来处理css-loader和vue-style-loader的
const config = require('../config') //---引入config目录下的index.js配置文件,主要用来定义一些开发和生产环境的属性
const vueLoaderConfig = require('./vue-loader.conf') //---vue-loader.conf配置文件是用来解决各种css文件的,定义了诸如css,less,sass之类的和样式有关的loader
function resolve (dir) { //---此函数是用来返回当前目录的平行目录的路径,因为有个'..'
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './src/main.js' //---入口文件是src目录下的main.js
},
output: {
path: config.build.assetsRoot, //---输出路径是config目录下的index.js中的build配置中的assetsRoot,也就是dist目录
filename: '[name].js', //---项目输出文件名称,这里使用默认的name也就是main。
publicPath: process.env.NODE_ENV === 'production' //---上线地址,也就是真正的文件引用路径,如果是production生产环境,其实这里都是 '/'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
// resolve是webpack的内置选项,顾名思义,决定要做的事情,也就是说当使用 import "jquery",该如何去执行这件事
// 情就是resolve配置项要做的,import jQuery from "./additional/dist/js/jquery" 这样会很麻烦,可以起个别名简化操作
extensions: ['.js', '.vue', '.json'], // 省略扩展名,也就是说.js,.vue,.json文件导入可以省略后缀名,这会覆盖默认的配置,所以要省略扩展名在这里一定要写上
alias: {
//后面的$符号指精确匹配,也就是说只能使用 import vuejs from "vue" 这样的方式导入vue.esm.js文件,不能在后面跟上 vue/vue.js
'vue$': 'vue/dist/vue.esm.js',
// resolve('src') 其实在这里就是项目根目录中的src目录,使用 import somejs from "@/some.js" 就可以导入指定文件,是不是很高大上
'@': resolve('src')
}
},
// 以下是一些静态资源过滤规则,通过条件进行过滤
// module用来解析不同的模块
module: {
rules: [
{
test: /\.(js|vue)$/,
// 也就是说,对.js和.vue文件在编译之前进行检测,检查有没有语法错误
loader: 'eslint-loader',
// 此选项指定enforce: 'pre'选项可以确保,eslint插件能够在编译之前检测,如果不添加此项,就要把这个配置项放到末尾,确保第一个执行
enforce: 'pre',
// include选项指明这些目录下的文件要被eslint-loader检测,还有一个exclude表示排除某些文件夹
include: [resolve('src'), resolve('test')],
// options表示传递给eslint-loader的参数
options: {
// formatter是参数的名称,eslint-friendly-formatter是eslint的一个报告总结插件,也就是说eslint的检测
报告非常难看懂,这个插件就是整理这些报告方便查阅的
formatter: require('eslint-friendly-formatter')
}
},
{
test: /\.vue$/,
// 对vue文件使用vue-loader,该loader是vue单文件组件的实现核心,专门用来解析.vue文件的
loader: 'vue-loader',
// 将vueLoaderConfig当做参数传递给vue-loader,就可以解析文件中的css相关文件
options: vueLoaderConfig
},
{
test: /\.js$/,
// 对js文件使用babel-loader转码,该插件是用来解析es6等代码
loader: 'babel-loader',
// 指明src和test目录下的js文件要使用该loader
include: [resolve('src'), resolve('test')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
// 对图片相关的文件使用 url-loader 插件,这个插件的作用是将一个足够小的文件生成一个64位的DataURL
// 可能有些老铁还不知道 DataURL 是啥,当一个图片足够小,为了避免单独请求可以把图片的二进制代码变成64位的
// DataURL,使用src加载,也就是把图片当成一串代码,避免请求,神不神奇??
loader: 'url-loader',
options: {
// 限制 10000 个字节一下的图片才使用DataURL
limit: 10000,
// 下面这个应该是指将[name].[hash:7].[ext]对应的图片使用url-loader测试吧,这个我是真不知道干啥的,如果知道
// 的兄弟,一定要留言给我啊,拜谢
name: utils.assetsPath('img/[name].[hash:7].[ext]') // 这个函数执行结果是 /img/[name].[hash:7].[ext]
// 不知道吧 name 设置成 /img/[name].[hash:7].[ext] 意欲何为,猜测应该是输出图片的路径或者是解析图片的路径
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
// 字体文件处理,和上面一样
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
}
//原文链接:https://blog.csdn.net/song854601134/article/details/120598344?spm=1001.2014.3001.5502