>  기사  >  웹 프론트엔드  >  vue-cli 사용법에 대한 자세한 설명

vue-cli 사용법에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-15 10:24:362601검색

이번에는 vue-cli 사용에 대한 자세한 설명을 가져오겠습니다. vue-cli 사용 시 주의사항은 무엇인가요?

vue-cli

개발하기 전에 vue 공식 문서와 API를 한 번 이상 읽어야 합니다(공식 문서를 읽는 것이 가장 중요하며, 50개 또는 100개의 블로그를 읽는 것보다 낫습니다). 영문문서 내용은 조금 뒤처지면 관련 vue-router, axios, vuex 등을 읽어야 합니다.

일반적으로 먼저 vue-cli를 사용하여 프로젝트의 기본 구조를 구축합니다.

텍스트

먼저 설치에 관한 이야기를 해보죠! 시작과 끝이 있다는 목적을 위해서는 여전히 몇 마디 말로 서두르는 문제입니다. 단계는 다음과 같습니다:

vue-cli

npm install vue-cli -g

설치 webpack 템플릿을 사용하여 디렉토리 설치

vue init webapck webpack-template

그런 다음 IDE를 사용하여 디렉터리를 열 수 있습니다.

후속 개정 후 독자의 오해를 피하기 위해 여기에 vue-cli 버전 2.9.2를 표시하십시오.

우선, 첫 번째 질문, 어디서부터 시작해야 할까요? 물론, 우리는 webpack.base.conf.js로 시작했습니다. 이는 dev 및 prod 환경 모두에서 로드되는 것입니다. 그런 다음 webpack.base.conf.js에서 사용될 여러 파일로 시작할 수 있습니다. 실제로 다음 파일이 기본에서 사용되며 코드에서 확인할 수 있습니다.

'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')

그들은:

  • path [경로 모듈]

  • 빌드 디렉터리의 utils.js 파일

  • config 디렉터리의 인덱스 파일

  • 빌드 디렉터리의 vue-loader.conf.js 파일

경로 경로

이 모듈은 nodejs 공식 홈페이지에서 소개할 수 있는데 실제로는 파일 경로를 얻고 설정하는 모듈입니다.

경로 모듈은 파일 처리 및 디렉터리 경로

utils.js

를 위한 도구를 제공합니다. 거기로 가서 코드를 살펴보면 실제로 이름만으로도 전체 스캐폴딩에 대한 메서드를 제공할 수 있다는 것을 추론할 수 있습니다. 먼저 헤더에서 참조하는 리소스 파일을 살펴보겠습니다.

const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')

마찬가지로, config 디렉터리의 경로 모듈과 index.js 파일과 npm 패키지(extract-text-webpack-plugin)도 참조합니다. 이 패키지는 CSS와 JS의 내용을 분리하는 데 사용됩니다. 나중에 이에 대해 더 자세히 알아볼 수 있습니다. 동시에 json 파일인 package.json 파일도 참조하며, 로드되면 객체가 됩니다.

따라서 헤드 종속성부터 시작해야 합니다.

이전에 경로 모듈에 대해 언급했으므로 여기서는 자세히 설명하지 않겠습니다. config 디렉터리에 있는 index.js 파일을 분석할 수 있습니다.

index.js

이 파일에는 실제로 꽤 충분한 코드 주석이 있으며, 이를 자세히 살펴볼 수도 있습니다.

코드에서 dev 및 build 두 가지 설정이 포함된 module.exports를 통해 개체가 내보내지는 것을 볼 수 있습니다.

개발에서는 일부 구성이 설정되며 코드는 다음과 같습니다:

modules.exports = {
 dev: { 
 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {}, 
 // Various Dev Server settings
 host: 'localhost', // can be overwritten by process.env.HOST
 port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
 autoOpenBrowser: false,
 errorOverlay: true,
 notifyOnErrors: true,
 poll: false, // 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: true,
 // 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: '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, 
 // CSS Sourcemaps off by default because relative paths are "buggy"
 // with this option, according to the CSS-Loader README
 // (https://github.com/webpack/css-loader#sourcemaps)
 // In our experience, they generally work as expected,
 // just be aware of this issue when enabling this option.
 cssSourceMap: false,
 }
 }

주석을 통해 우리는 dev에서 정적 경로, 로컬 서버 구성 항목, Eslint, 소스 맵 및 기타 매개 변수를 구성한다는 것을 이해할 수 있습니다. 개발 중에 정적 리소스 파일, 서버 포트 및 기타 설정을 변경해야 하는 경우 이 파일에서 수정할 수 있습니다.

아래에는 vue 로컬 서버가 시작될 때 패키지된 일부 구성인 빌드 개체도 있습니다.

build: {
 // Template for index.html
 index: path.resolve(dirname, '../dist/index.html'),
 // Paths
 assetsRoot: path.resolve(dirname, '../dist'),
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 /**
 * Source Maps
 */
 productionSourceMap: true,
 // 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,
 productionGzipExtensions: ['js', 'css'],
 // 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
 }

여기에는 템플릿 파일 수정, 디렉터리 패키징 후 일부 경로 설정, gzip 압축 등이 포함됩니다. 이러한 필드의 의미를 이해한 후에는 후속 개발에서 프로젝트 요구 사항에 따라 디렉토리 내용을 사전에 변경할 수 있습니다.

config 아래의 index.js 파일에 대해 이야기한 후 utils.js 파일로 돌아가서 이들이 어떤 역할을 하는지 분석하는 몇 가지 방법을 살펴볼 수 있습니다.

1.자산 경로 메소드

_path 매개변수를 허용합니다

返回static目录位置拼接的路径。

它根据nodejs的proccess.env.NODE_ENV变量,来判断当前运行的环境。返回不同环境下面的不同static目录位置拼接给定的_path参数。

2、cssLoaders方法

接受一个options参数,参数还有的属性:sourceMap、usePostCSS。

同时,这里用到了我们之前提到的extract-text-webpack-plugin插件,来分离出js中的css代码,然后分别进行打包。同时,它返回一个对象,其中包含了css预编译器(less、sass、stylus)loader生成方法等。如果你的文档明确只需要一门css语言,那么可以稍微清楚一些语言,同时可以减少npm包的大小(毕竟这是一个令人烦躁的东西)。

3、styleLoaders方法

接受的options对象和上面的方法一致。该方法只是根据cssLoaders中的方法配置,生成不同loaders。然后将其返回。

4、createNotifierCallback方法

此处调用了一个模块,可以在GitHub上找到,它是一个原生的操作系统上发送通知的nodeJS模块。用于返回脚手架错误的函数

一共这么四个函数方法,在utils中被定义到。

回看到webpack.base.conf.js文件中,我们可以直接跳过config目录下的index.js文件,之前已经分析过了。直接来看一下vue-loader.conf.js下的内容。

vue-loader.conf.js

这个文件中的代码非常的少,我们可以直接贴上代码,然后来分析,其中的作用。代码如下:

'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
 ? config.build.productionSourceMap
 : config.dev.cssSourceMap
module.exports = {
 loaders: utils.cssLoaders({
 sourceMap: sourceMapEnabled,
 extract: isProduction
 }),
 cssSourceMap: sourceMapEnabled,
 cacheBusting: config.dev.cacheBusting,
 transformToRequire: {
 video: ['src', 'poster'],
 source: 'src',
 img: 'src',
 image: 'xlink:href'
 }
}

其中,主要就是根据NODE_ENV这个变量,然后分析是否是生产环境,然后将根据不同的环境来加载,不同的环境,来判断是否开启了sourceMap的功能。方便之后在cssLoaders中加上sourceMap功能。然后判断是否设置了cacheBusting属性,它指的是缓存破坏,特别是进行sourceMap debug时,设置成false是非常有帮助的。最后就是一个转化请求的内容,video、source、img、image等的属性进行配置。

具体的还是需要去了解vue-loader这个webpack的loader加载器。

分析了这么多,最终回到webpack.base.conf.js文件中

webpack.base.conf.js

其实的两个方法,其中一个是来合并path路径的,另一个是加载Eslint的rules的。

我们直接看后面那个函数,createLintingRule方法:

其中,加载了一个formatter,这个可以在终端中显示eslint的规则错误,方便开发者直接找到相应的位置,然后修改代码。

之后的一个对象,就是webpack的基础配置信息。我们可以逐一字段进行分析:

  • context => 运行环境的上下文,就是实际的目录

  • entry => 入口文件:src下的main.js文件

  • output => 输出内容,这内部的配置会根据不同的运行环境来进行变化

  • resolve => 其中的extensions字段,指定检测的文件后缀,同时alias是用于指定别名的。在引用文件路径中,如果有别名的符号,会被替换成指定的路径。

  • module => 配置了一些eslint、vue、js、图片资源、字体图标、文件等加载的loader。详细的可以去看webpack的官方网站。

  • node => 此处部分有注释,主要是阻止一些webpack的默认注入行为,因为在vue中,已经具备了这些功能。

看完这些,你或许对webapck.base.conf.js中的内容有了一些初步的了解。其实,看懂它还需要你了解webpack这个非常有用的打包工具。

之后,我们在来回看webpack.dev.conf.js这个文件

webpack.dev.conf.js

这个文件中,引用了webapck-merge这npm包,它可以将两个配置对象,进行合并。代码如下:

const merge = require('webpack-merge');
const devWebpackConfig = merge(baseWebpackConfig, {
 ...
}

这样就合并了base中的webpack配置项。之后,我们可以来看一下dev环境中的新增了那些配置项,它们分别起到了什么作用?

  • 首先,在module的rules中增加了cssSourceMap的功能

  • 然后就是devtools,通过注释的英文翻译,可以知道cheap-module-eval-source-map使得开发更快。

  • 之后,就是devSever的一些配置项了。其中包块客户端报错级别、端口、host等等

  • 还有新增的plugins,我们可以来看一下实际新增的plugins(具体可以看webpack文档):

  • 定义process.env
    HotModuleReplacementPlugin: 模块热替换插件
    NameModulesPlugin: 显示模块加载相对路径插件
    NoEmitOnErrorsPlugin: 在编译出现错误时,使用 NoEmitOnErrorsPlugin 来跳过输出阶段。这样可以确保输出资源不会包含错误
    HtmlWebpackPlugin: 使用插件生成一个指定的模版。

后,还有一个函数,确保启动程序时,如果端口被占用时,会通过portfinder来发布新的端口,然后输出运行的host字符串。

webpack.prod.conf.js

这是打包到生产环境中,会被用到的文件。我们可以看到,它相对于之前的webapck.dev.conf.js文件少了一些插件,多了更多的插件。我们也可以和之前一样,通过它新增的一些东西,来知道它到底干了什么!(此处的新增是相对于webpack.dev.conf.js没有的内容)

  • 新增了output的配置,我们可以看到它在output中新增了一些属性,将js打包成不同的块chunk,然后使用hash尾缀进行命名

  • 添加一些插件:

  • UglifJsPlugin: 这个是用来丑化js代码的
    ExtractTextplugin: 这里新增了一些属性,在打包的css文件也增加了块和hash尾缀
    OptimizeCssplugin: 这里是来优化css文件的,主要就是压缩css代码
    HashedModuleIdsPlugin: 保证module的id值稳定
    optimize: 这里是webpack一系列优化的措施,具体可以逐一查看官方文档
    CopyWebPlugins: 自定义assets文件目录

  • 如果没有进行gzip压缩,调用CompressionWebpackPlugin插件进行压缩

这样,我们的webpack配置文件内容基本上就全部看完了。或许,会有点蒙,还是看官方文档来的实在。

最后,还需要分析一个build.js文件。

build.js

这个文件是在打包的时候,会被用到的。

首先,文件的开头请求了check-version.js中的函数,然后确定了一下node和npm的版本。相对于较低版本的node和npm,在打包过程中,会产生警告。之后,设置环境参数,设置成生产环境,之后就是一系列打包的流程。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

위 내용은 vue-cli 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.