最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何写一个最简单的vue-cli(tiny-cli)

    正文概述 掘金(泡泡oO水流)   2021-06-03   749

    这是我参与更文挑战的第2天,活动详情查看: 更文挑战

    demo源码 看着代码更容易理解,代码有注释。

    仓库说明

    base分支

    基础的webpack配置,然后webpack运行项目,这边直接将webpack命令通过package.json的scripts去执行了。

    npm i
    npm run watch
    

    base-vue分支

    vue项目的webpack的一般配置

    npm run dev
    

    base-cli分支

    基本的cli所拥有的功能,生成项目,开发环境,生产环境是如何运行的。

    tiny-cli -i app //创建一个app项目
    cd app
    npm i
    tiny-cli -d //开发环境启动
    tiny-cli -b //生产编译
    

    template分支

    用于创建初始项目时需要clone的项目模板

    需要的哪些模块?

    做成cli,除了webpack和babel等一些基础的编译配置,还需要

    commander,用于创建终端命令,上面的-d,-b等命令就是通过这个来创建的;

    download-git-repo,创建项目的时候需要该模块从git上clone基本的项目目录;

    chalk、ora,这两个库是用于编译时美化输出的,为了更好看。

    以vue框架为例,基本webpack配置?

    详情见源码的base-vue分支 常用配置

    • entry:编译入口,当前项目的主要的js文件,比如当前的 src/index.js;
    • output: 输出配置;
    • module: 一般常用rules,用于编译不同文件的代码,如es,vue文件等,需要使用的vue-loader,babel-loader等;
    • plugins:编译时对某些运行钩子要做的事情;
    • resolve:加快对文件的引用,以及别名的命名等。
    const webpack = require('webpack');
    const path = require('path');
    const CWD = process.cwd();
    const VueLoaderPlugin = require('vue-loader/lib/plugin');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    
    module.exports = {
      entry: './src/index.js',
      output: {
        publicPath: '/',
        filename: 'js/[name].[hash].js'
      },
      module: {
        rules: [
          // babel编译
          {
            test: /\.js|jsx$/,
            loader: 'babel-loader',
            exclude: /node_modules/,
          },
          // vue编译loader,需要与下面的plugin的VueLoaderPlugin联合使用,不然会报错
          {
            test: /\.vue$/,
            loader: 'vue-loader'
          },
          // less编译
          {
            test: /\.less$/,
            use: [
              {
                loader: 'style-loader'
              },
              {
                loader: 'css-loader',
              },
            ]
          },
          // 对css样式进行编译,包括vue文件里面的style
          {
            test: /\.css$/,
            use: ExtractTextPlugin.extract({
              fallback: 'style-loader',
              use: ['css-loader'],
            }),
          },
          // 加载静态文件, webpack4版本不需要file-loader单独配置,不然图片出不来(巨坑)
          {
            test: /\.(png|jpg|gif)$/i,
            use: [
              {
                loader: 'url-loader',
                options: {
                  fallback: require.resolve('file-loader'),
                  limit: 8192,
                  esModule: false,
                },
              },
            ],
          },
        ],
      },
      plugins:  [
        // 清空之前的输出目录
        new CleanWebpackPlugin(),
        //  以什么html为模板
        new HtmlWebpackPlugin({
          hash: true,
          title: 'tiny-demo',
          template: './src/index.html',
        }),
        new ExtractTextPlugin('style.css'),
        // 与vue-loader配合使用,编译vue文件
        new VueLoaderPlugin(),
        // 启用热替换
        new webpack.NamedModulesPlugin(),
        new webpack.HotModuleReplacementPlugin(),
      ],
      mode: 'development',
      devtool: 'inline-source-map',
      devServer: {
        contentBase: './dist',
        hot: true
      },
      // 别名
      resolve: {
        alias: {
          'vue$': 'vue/dist/vue.esm.js', //这里如果不加这个,import vue时会报错
          '@': path.join(CWD, './src') //src别名目录
        },
        extensions: ['*', '.js', '.vue', '.json']
      },
    };
    

    如何将tiny-cli命令挂载到本地全局访问?

    其实很简单,package.json有个bin配置,将需要运行的nodejs文件配置好即可,如:

      "bin": {
        "tiny-cli": "bin/index.js"
      },
    

    这里写好之后,通过npm link就可以将tiny-cli挂载到全局访问,这里其实最终版运行的是bin目录下的index.js文件,最终执行的命令是node bin/index,所有的命令执行将通过bin下面的program文件去判断,当前执行的命令是什么,根据命令的不同通过判断,去做不同的操作,这里只做了三个命令操作,一个创建项目(-i),一个开发环境启动(-d),一个生产编译(-b)。如果要去除这个tiny-cli全局命令,只需要npm unlink即可。

    如何执行命令?

    主要代码:bin/program.js

    运用模块:commander

    需要使用commander模块,主要代码在bin/program.js,这里可配置各种不同命令,运行时通过program的对象属性判断,比如,program.dev就是用于判断是否是开发环境

    如何生成一个基本的template目录?

    主要代码:repo.js

    运用模块:download-git-repo

    该文件主要处理项目创建时的模板clone,创建时使用了chalk和ora模块,美化了创建时的输出。

    最后

    等一切测试成功之后,就可以直接运行npm publish 发布到自己的npm账号的packages了。自己对着代码,直接运行看看吧,代码较简单,没有附加功能,有问题直接评论区哦!!谢谢各位观看!!


    起源地下载网 » 如何写一个最简单的vue-cli(tiny-cli)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元