zoukankan      html  css  js  c++  java
  • vue-cli# 项目结构

    引自:https://segmentfault.com/a/1190000007880723

    http://blog.csdn.net/hongchh/article/details/55113751

    .
    |-- build                            // 项目构建(webpack)相关代码
    |   |-- build.js                     // 生产环境构建代码
    |   |-- check-version.js             // 检查node、npm等版本
    |   |-- dev-client.js                // 热重载相关
    |   |-- dev-server.js                // 构建本地服务器
    |   |-- utils.js                     // 构建工具相关
    |   |-- webpack.base.conf.js         // webpack基础配置
    |   |-- webpack.dev.conf.js          // webpack开发环境配置
    |   |-- webpack.prod.conf.js         // webpack生产环境配置
    |-- config                           // 项目开发环境配置
    |   |-- dev.env.js                   // 开发环境变量
    |   |-- index.js                     // 项目一些配置变量
    |   |-- prod.env.js                  // 生产环境变量
    |   |-- test.env.js                  // 测试环境变量
    |-- src                              // 源码目录
    |   |-- components                     // vue公共组件
    |   |-- store                          // vuex的状态管理
    |   |-- App.vue                        // 页面入口文件
    |   |-- main.js                        // 程序入口文件,加载各种公共组件
    |-- static                           // 静态文件,比如一些图片,json数据等
    |   |-- data                           // 群聊分析得到的数据用于数据可视化
    |-- .babelrc                         // ES6语法编译配置
    |-- .editorconfig                    // 定义代码格式
    |-- .gitignore                       // git上传需要忽略的文件格式
    |-- README.md                        // 项目说明
    |-- favicon.ico 
    |-- index.html                       // 入口页面
    |-- package.json                     // 项目基本信息
    .

    package.json

    package.json文件是项目根目录下的一个文件,定义该项目开发所需要的各种模块以及一些项目配置信息(如项目名称、版本、描述、作者等)。

    scripts字段

    package.json文件里有一个scripts字段。

    "scripts": {
        "dev": "node build/dev-server.js",
        "build": "node build/build.js"
      }

    在开发环境下,在命令行中运行npm run dev就相当于在执行node build/dev-server.js。所以script字段是用来指定npm相关命令的缩写的。

    dependencies字段和devDependencies字段

    dependencies字段指定了项目运行时所依赖的模块,devDependencies字段指定了项目开发时所依赖的模块。在命令行中运行npm install命令,会自动安装dependencies和devDependencies字段中的模块。 
    package.json还有很多配置相关项,想进一步了解package.json的可参考:https://docs.npmjs.com/files/package.json

    webpack配置相关

    上面说到在命令行中npm run dev就相当于在执行node build/dev-server.js,想必dev-server.js这个文件是十分重要的,它是在开发环境下构建时第一个要运行的文件。掘金上已经有一篇对vue-cli#2.0 webpack配置的分析文章,里面详细讲解了webpack相关配置文件的每行代码的意思,我只做一些补充。链接在此(一定要自习阅读,收获会很大):https://gold.xitu.io/post/584e48b2ac502e006c74a120

    dev-server.js

    ...
    ...
    // http-proxy可以实现转发所有请求代理到后端真实API地址,以实现前后端开发完全分离
    // 在config/index.js中可以对proxyTable想进行配置
    var proxyMiddleware = require('http-proxy-middleware')
    ...
    ...
    // 热加载要使用webpack-dev-middleware在没有webpack-dev-server的时候进行热加载
    var hotMiddleware = require('webpack-hot-middleware')(compiler)
    // 当html-webpack-plugin模板改变是强制进行页面重新加载
    compiler.plugin('compilation', function (compilation) {
      compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
        hotMiddleware.publish({ action: 'reload' })
        cb()
      })
    })

    webpack.base.conf.js

    ...
    ...
    module.export = {
        // 编译入口文件
        entry: {},
        // 编译输出路径
        output: {},
        // 一些解决方案配置
        resolve: {},
        resolveLoader: {},
        module: {
            // 各种不同类型文件加载器配置
            loaders: {
            ...
            ...
            // js文件用babel转码
            {
                test: /.js$/,
                loader: 'babel',
                include: projectRoot,
                // 哪些文件不需要转码
                exclude: /node_modules/
            },
            ...
            ...
            }
        },
        // vue文件一些相关配置
        vue: {}
    } 

    check-version.js

    这个文件主要是用来检测当前环境中的node和npm版本和我们需要的是否一致的。

    // 加载语义化版本测试库
    var semver = require('semver')
    // 定制控制台日志的输入样式
    var chalk = require('chalk')
    // 引入package.json文件
    var packageConfig = require('../package.json')
    var exec = function (cmd) {
      return require('child_process')
        .execSync(cmd).toString().trim()
    }
    // 定义node和npm版本需求所组成的数组
    var versionRequirements = [
      {
        name: 'node',
        currentVersion: semver.clean(process.version),
        versionRequirement: packageConfig.engines.node
      },
      {
        name: 'npm',
        currentVersion: exec('npm --version'),
        versionRequirement: packageConfig.engines.npm
      }
    ]
    module.exports = function () {
      var warnings = []
      // 依次判断版本是否符合要求
      for (var i = 0; i < versionRequirements.length; i++) {
        var mod = versionRequirements[i]
        if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
          warnings.push(mod.name + ': ' +
            chalk.red(mod.currentVersion) + ' should be ' +
            chalk.green(mod.versionRequirement)
          )
        }
      }
      ...
    }

    想把webpack完全搞懂还是需要费很大功夫的,我感觉自己也只是入了一个门而已,要想深入了解webpack还是要去官网看说明文档。

    1. http://webpack.github.io/docs/

    2. https://webpack.js.org/configuration/

    .babelrc

    Babel解释器的配置文件,存放在根目录下。Babel是一个转码器,项目里需要用它将ES6代码转为ES5代码。这里有一篇阮一峰老师写的相关文章供参考:Babel 入门教程

      // 设定转码规则
      "presets": ["es2015", "stage-2"],
      // 转码的一些插件
      "plugins": ["transform-runtime"],
      "comments": false 

    .editorconfig

    该文件定义项目的编码规范,编辑器的行为会与.editorconfig 文件中定义的一致,并且其优先级比编辑器自身的设置要高,这在多人合作开发项目时十分有用而且必要。

    root = true
    
    [*]    // 对所有文件应用下面的规则
    charset = utf-8                    // 编码规则用utf-8
    indent_style = space               // 缩进用空格
    indent_size = 2                    // 缩进数量为2个空格
    end_of_line = lf                   // 换行符格式
    insert_final_newline = true        // 是否在文件的最后插入一个空行
    trim_trailing_whitespace = true    // 是否删除行尾的空格

    了解更多请参考官方配置文档http://editorconfig.org/

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/myzy/p/7090301.html
Copyright © 2011-2022 走看看