如何使用TypeScript支持创建Nuxt构建?

时间:2019-02-12 14:57:02

标签: typescript vue.js nuxt.js

我正在尝试使用命令“ npm run build”构建一个nuxtjs应用,该应用正在执行“ nuxt build”。

但是,构建失败,并且看起来nuxt不知道如何编译Typescript代码。但是有趣的是,“ npm run dev”命令可以正常运行,并且该应用程序可以正常运行。只是生产构建失败。

我注意到,如果我从单个文件组件中的script标记中删除lang =“ ts”,该错误消失了,但是当然,打字稿代码无法编译,并且会发生其他错误。 我尝试了各种tsconfig.json配置,但没有一个工作。 我在package.json文件的依赖项中包含打字稿和ts-loader模块。

"ts-loader": "^5.3.3",
"typescript": "^3.3.3",

这是我在运行“ npm run build”时收到的错误消息的示例。

ERROR in ./pages/index.vue?vue&type=script&lang=ts& (./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib??ref--0-2!./node_modules/ts-loader??ref--0-3!./node_modules/babel-loader/lib??ref--4-0!./node_modules/ts-loader??ref--4-1!./node_modules/vue-loader/lib??vue-loader-options!./pages/index.vue?vue&type=script&lang=ts&)
Module build failed (from ./node_modules/thread-loader/dist/cjs.js):
Thread Loader (Worker 4)
Cannot read property 'errors' of undefined

    at successfulTypeScriptInstance (../node_modules/ts-loader/dist/instances.js:90:28)
    at Object.getTypeScriptInstance (../node_modules/ts-loader/dist/instances.js:34:12)
    at Object.loader (../node_modules/ts-loader/dist/index.js:17:41)
 @ ./pages/index.vue?vue&type=script&lang=ts& 1:0-404 1:420-423 1:425-826 1:425-826
 @ ./pages/index.vue
 @ ./.nuxt/router.js
 @ ./.nuxt/index.js
 @ ./.nuxt/client.js
 @ multi ./.nuxt/client.js

这是我的tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "lib": [
            "dom",
            "es2015"
        ],
        "module": "es2015",
        "moduleResolution": "node",
        "experimentalDecorators": true,
        "noImplicitAny": false,
        "noImplicitThis": false,
        "strictNullChecks": true,
        "removeComments": true,
        "suppressImplicitAnyIndexErrors": true,
        "allowSyntheticDefaultImports": true,
        "allowJs": true,
        "baseUrl": ".",
        "paths": {
            "~/*": [
                "./*"
            ]
        },
        "noUnusedLocals": true,
        "resolveJsonModule": true,
        "esModuleInterop": true
    }
}

有人有什么想法让NuxtJ与Typescript一起用于生产构建,而不仅仅是开发?

谢谢

2 个答案:

答案 0 :(得分:1)

您应该使用nuxt-ts

在此处查看一些文档和示例

https://nuxtjs.org/guide/typescript

更多文档即将推出

答案 1 :(得分:1)

(使用@Aldarund)建议最终解决方案是使用nuxt-ts,但不使用任何其他打字稿模块,例如 typescript nuxt-typescript 。您甚至不需要 ts-loader 模块。 并且 nuxt.config.js 必须重命名为 nuxt.config.ts

更不用说您只需要在npm脚本中使用 nuxt-ts 而不是普通的 nuxt

编辑2019年4月: 从Nuxt.js的2.5.0版本开始,打字稿支持不再需要nuxt-ts。 Nuxt.js通过安装@ nuxt / typescript正式支持typescript。

Nuxt v2.5.0 release notes