您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Nuxt項(xiàng)目怎么支持eslint+pritter+typescript,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
腳手架安裝好nuxt的基本項(xiàng)目
npx create-nuxt-app <項(xiàng)目名>
,如:npx create-nuxt-app nuxt-ts
,按照提示安裝你想要的東西,本次項(xiàng)目預(yù)裝: Universal模式下koa+PWA+linter+prettier+axios ,默認(rèn)的項(xiàng)目目錄如下:
eslint + prettier + vscode 保存自動(dòng)格式化&修復(fù)
本人習(xí)慣縮進(jìn)為4個(gè)空格,但是eslint&nuxt生成的項(xiàng)目默認(rèn)為2個(gè),因此需要更改配置
.editorconfig
文件下的indent_size: 2
更改為indent_size: 4
.vscode/settings.json
{ // 保存時(shí)eslint自動(dòng)修復(fù)錯(cuò)誤 "eslint.autoFixOnSave": true, // 保存自動(dòng)格式化 "editor.formatOnSave": true, // 開啟 eslint 支持 "prettier.eslintIntegration": true, // prettier配置 --- 使用單引號(hào)【與.prettierrc下的配置對(duì)應(yīng)】 "prettier.singleQuote": true, //prettier配置 --- 結(jié)尾不加分號(hào) 【與.prettierrc下的配置對(duì)應(yīng)】 "prettier.semi": false, //prettier配置 --- 每行最多顯示的字符數(shù) 【與.prettierrc下的配置對(duì)應(yīng)】 "prettier.printWidth": 120, //.vue文件template格式化支持,并使用js-beautify-html插件 "vetur.format.defaultFormatter.html": "js-beautify-html", //js-beautify-html格式化配置,屬性強(qiáng)制換行 "vetur.format.defaultFormatterOptions": { "js-beautify-html": { // "wrap_attributes": "force-aligned" } }, //根據(jù)文件后綴名定義vue文件類型 "files.associations": { "*.vue": "vue" }, //配置 ESLint 檢查的文件類型 "eslint.validate": [ "javascript", "javascriptreact", { "language": "vue", "autoFix": true }, { "language": "typescript", "autoFix": true } ], "files.autoSave": "onFocusChange", "vetur.format.enable": false, "vetur.experimental.templateInterpolationService": true, "editor.detectIndentation": false }
.prettierrc
文件
{ "singleQuote": true, // 使用單引號(hào) `.vscode/settings.json` 的`prettier.semi` "semi": false, // 結(jié)尾不加分號(hào) `.vscode/settings.json` 的`prettier.semi` "printWidth": 120 // 此項(xiàng)為我自加以上兩項(xiàng)為默認(rèn),表示每行最多顯示的字符數(shù),默認(rèn)為80,本人覺得太短了,因此修改了一下,必須與`.vscode/settings.json` 的`prettier.printWidth`對(duì)應(yīng)上 /* 更多配置請(qǐng)戳 https://prettier.io/docs/en/options.html */ }
.eslintrc.js
文件配置
module.exports = { root: true, env: { browser: true, node: true }, parserOptions: { parser: 'babel-eslint' }, extends: [ '@nuxtjs', 'plugin:nuxt/recommended', 'plugin:prettier/recommended', 'prettier', 'prettier/vue' ], plugins: ['prettier'], // add your custom rules here rules: { 'nuxt/no-cjs-in-config': 'off', indent: ['error', 4] // 4個(gè)空格縮進(jìn) /* 更多配置請(qǐng)戳 http://eslint.cn/docs/rules/ */ } }
nuxt.config.js
文件下 build.extend(config, ctx) {}
添加options.fix: true
build: { /* ** You can extend webpack config here */ extend(config, ctx) { // Run ESLint on save if (ctx.isDev && ctx.isClient) { config.module.rules.push({ enforce: 'pre', test: /\.(js|vue)$/, loader: 'eslint-loader', exclude: /(node_modules)/, options: { fix: true } }) } } }
開始改造工程支持typescript
安裝所需插件
npm i -D @nuxt/typescript ts-node @typescript-eslint/eslint-plugin
npm install -S vue-class-component vue-property-decorator
修改&添加配置
package.json
添加或編輯package.json的lint腳本:"lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore ."
修改package.json
的 dev
腳本中 server/index.js
為 server/index.ts
"dev": "cross-env NODE_ENV=development nodemon server/index.ts --watch server",
tsconfig.json
項(xiàng)目目錄下新建tsconfig.json
文件后,在package.json文件下添加:"start-dev": "nuxt"
腳本命令,運(yùn)行npm run dev
就會(huì)使用默認(rèn)值自動(dòng)更新此配置文件
.eslintrc.js
修改.eslintrc.js
文件 parserOptions.parser: '@typescript-eslint/parser'
parserOptions: { parser: '@typescript-eslint/parser' },
修改.eslintrc.js
文件 plugins添加'@typescript-eslint'
plugins: ['prettier', '@typescript-eslint'],
nuxt.config.js
修改nuxt.config.js
文件后綴為 nuxt.config.ts
修改nuxt.config.ts
的build.extend
{ test: /\.ts$/, exclude: [/node_modules/, /vendor/, /\.nuxt/], loader: 'ts-loader', options: { appendTsSuffixTo: [/\.vue$/], transpileOnly: true } }
server/index.js
修改server/index.js
文件后綴為 server/index.ts
修改server/index.ts
中的
const config = require('../nuxt.config.js') // 為 const config = require('../nuxt.config.ts')
修改vue文件為typescript語(yǔ)法
<script> import Logo from '~/components/Logo.vue' export default { components: { Logo } } </script>
typescript 語(yǔ)法如下:
<script lang="ts"> import { Component, Vue } from 'vue-property-decorator' import Logo from '~/components/Logo.vue' @Component({ components: { Logo }, middleware: 'check-auth' }) export default class IndexPage extends Vue {} </script>
坑點(diǎn)
vetur 報(bào)錯(cuò) Cannot find module 'xxxx'
解決方案:import 路徑 需要寫清楚后綴
關(guān)于“Nuxt項(xiàng)目怎么支持eslint+pritter+typescript”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。