内容简介:喜大普奔,Nuxt终于正式发布2.0了,最近趁热把博客从1.4升级到了2.0,并且用Typescript重构了下,可以点Jooger.me看下,在升级Nuxt过程中出现了一个小问题关于release 2.0的公告可以查看官网的Release Notes以及官方的今天出现的问题是这样的,随着nuxt升级,webpack和vue-loader也分别升级到了4和15,升级过后,报了如下问题
喜大普奔,Nuxt终于正式发布2.0了,最近趁热把博客从1.4升级到了2.0,并且用Typescript重构了下,可以点Jooger.me看下,在升级Nuxt过程中出现了一个小问题
关于release 2.0的公告可以查看官网的Release Notes以及官方的 Demo ,升级过程十分简单,基本不需要什么迁移成本,所有npm命令都跟以前一样,只需要把一些关联包升级一下即可
今天出现的问题是这样的,随着nuxt升级,webpack和vue-loader也分别升级到了4和15,升级过后,报了如下问题
Invalid source file: ***.vue. Ensure that the files supplied to lint have a .ts, .tsx, .d.ts, .js or .jsx extension. 复制代码
一般看到这个 extension
的问题都下意识地想到webpack的 resolve.extensions
没有配置.ts或者.tsx扩展,但其实不然,仔细看前半句会发现是在处理 .vue
文件的时候报的这个错,所以很容易就想到应该是 vue-loader
的问题了,在vue-loader的这个 issue
讨论了这个问题
耐心查看完,会发现其实是tslint-loader的typeCheck在作怪,如果开启这个选项,那就会导致上述错误,理由是这个选项导致在构建的时候tslint会lint整个vue文件,而不单单是文件里的ts部分,所以直接解决办法是把tslint-loader的typeCheck去掉
至于为啥会lint全文件,这个后续再验证下,应该是vue-loader15的对vue文件进行拆分时出现问题
而且关掉typeCheck会出现什么问题,目前还未发现
到这里可以其实再进一步思考一下,为啥vue-cli3的tslint没有报错了,看了下vue-cli的ts插件cli-plugin-typescript里的代码
addLoader({ loader: 'ts-loader', options: { transpileOnly: true, appendTsSuffixTo: ['\\.vue$'], // https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse happyPackMode: useThreads } }) // make sure to append TSX suffix tsxRule.use('ts-loader').loader('ts-loader').tap(options => { options = Object.assign({}, options) delete options.appendTsSuffixTo options.appendTsxSuffixTo = ['\\.vue$'] return options }) config .plugin('fork-ts-checker') .use(require('fork-ts-checker-webpack-plugin'), [{ vue: true, tslint: options.lintOnSave !== false && fs.existsSync(api.resolve('tslint.json')), formatter: 'codeframe', // https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse checkSyntacticErrors: useThreads }]) 复制代码
可以看到它是用了 fork-ts-checker-webpack-plugin 这个webpack插件,具体什么用途可以看看它的README
所以modules/typescript.js最终配置如下
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') module.exports = function () { // Add .ts extension for store, middleware and more this.nuxt.options.extensions.push("ts") // Extend build this.extendBuild(config => { const tsLoader = { loader: 'ts-loader', options: { transpileOnly: true, appendTsSuffixTo: [/\.vue$/] } } // Add TypeScript loader config.module.rules.push( Object.assign({ test: /((client|server)\.js)|(\.tsx?)$/ }, tsLoader ) ) // Add .ts extension in webpack resolve if (config.resolve.extensions.indexOf(".ts") === -1) { config.resolve.extensions.push(".ts"); } config.plugins.push(new ForkTsCheckerWebpackPlugin({ vue: true, tslint: true, formatter: 'codeframe', // https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse checkSyntacticErrors: process.env.NODE_ENV === 'production' })) }) } 复制代码
更新
今天在用的时候,发现改了代码save的时候,nuxt会重新hot reload,这时会报如下错误
Error: fork-ts-checker-webpack-plugin hooks are already in use 复制代码
很明显,是reload过程中,加载了两次,所以modules/typescript.js代码更新如下
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') // 判断时候load过这个plugin let hasForkTsCheckerPlugin = false module.exports = function () { // Add .ts extension for store, middleware and more this.nuxt.options.extensions.push("ts") // Extend build this.extendBuild(config => { const tsLoader = { loader: 'ts-loader', options: { transpileOnly: true, appendTsSuffixTo: [/\.vue$/] } } // Add TypeScript loader config.module.rules.push( Object.assign({ test: /((client|server)\.js)|(\.tsx?)$/ }, tsLoader ) ) // Add .ts extension in webpack resolve if (config.resolve.extensions.indexOf(".ts") === -1) { config.resolve.extensions.push(".ts"); } if (!hasForkTsCheckerPlugin) { // 第一次load hasForkTsCheckerPlugin = true config.plugins.push(new ForkTsCheckerWebpackPlugin({ vue: true, tslint: true, formatter: 'codeframe', // https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse checkSyntacticErrors: process.env.NODE_ENV === 'production' })) } }) } 复制代码
以上所述就是小编给大家介绍的《Nuxt升级2.0.0时出现的问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何从 Java 8 升级到 Java 12,升级收益及问题处理技巧
- ReactNative升级0.56.0注意问题
- 工业4.0转型升级需要注意哪些问题?
- 升级到php7.2遇到的问题
- Flutter1.12 升级后的问题
- HBASE升级导致OpenTSDB服务不可用问题分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Alone Together
Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95
Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
HEX CMYK 转换工具
HEX CMYK 互转工具