Rollup-plugin-typescript2: ENOENT:没有这样的文件或目录,打开 '...?rollup-plugin-vue=script.d.ts'

创建于 2018-07-07  ·  11评论  ·  资料来源: ezolenko/rollup-plugin-typescript2

会发生什么以及为什么会出错

tsconfig.json $ 中将declaration设置为true时与rollup-plugin-vue一起使用时会出现此错误。

Error: ENOENT: no such file or directory, open '<path to project directory>\dist\components\Hello.vue?rollup-plugin-vue=script.d.ts'

回购到 Repro: https ://github.com/gluons/rollup-plugin-typescript2-issue-97

环境

操作系统: Windows 10
节点: v10.4.1
纱线: 1.7.0

版本

  • 打字稿:2.8.4
  • 汇总:0.62.0
  • 汇总插件 typescript2:0.15.1

rollup.config.js

import { resolve } from 'path';

import ts from 'rollup-plugin-typescript2';
import vue from 'rollup-plugin-vue';

export default {
    input: resolve(__dirname, './src/index.ts'),
    output: [
        {
            file: resolve(__dirname, './dist/hello-plugin.umd.js'),
            format: 'umd',
            sourcemap: true,
            name: 'HelloPlugin',
            globals: {
                vue: 'Vue'
            }
        },
        {
            file: resolve(__dirname, './dist/hello-plugin.es.js'),
            format: 'es',
            sourcemap: true
        }
    ],
    plugins: [
        ts({
            verbosity: 3 // Debug
        }),
        vue()
    ],
    external: ['vue']
};

tsconfig.json

{
    "compilerOptions": {
        "module": "es2015",
        "moduleResolution": "node",
        "target": "es5",
        "lib": [
            "dom",
            "es2015"
        ],
        "esModuleInterop": true,
        "sourceMap": true,
        "declaration": true
    },
    "include": [
        "src"
    ]
}

包.json

{
  "name": "rolup-vue-ts-issue",
  "version": "0.0.0",
  "description": "A repo to repro Rollup + Vue + TypeScript with declaration bundling issue.",
  "private": true,
  "scripts": {
    "prebuild": "rimraf dist/*",
    "build": "rollup -c rollup.config.ts"
  },
  "author": "Saran Tanpituckpong <[email protected]>",
  "license": "UNLICENSED",
  "devDependencies": {
    "@types/node": "8",
    "postcss": "^6.0.23",
    "rimraf": "^2.6.2",
    "rollup": "^0.62.0",
    "rollup-plugin-typescript2": "^0.15.1",
    "rollup-plugin-vue": "^4.3.0",
    "typescript": "~2.8",
    "vue-template-compiler": "^2.5.16"
  },
  "dependencies": {
    "vue": "^2.5.16"
  }
}

详细程度为 3 的插件输出

- 添加 verbosity verbosity: 3 到插件选项并在相关时附加输出(审查任何敏感内容) -

rpt2: typescript version: 2.8.4
rpt2: tslib version: 1.9.2
rpt2: rollup-plugin-typescript2 version: 0.15.1
rpt2: plugin options:
{
    "verbosity": 3,
    "check": true,
    "clean": false,
    "cacheRoot": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue/.rpt2_cache",
    "include": [
        "*.ts+(|x)",
        "**/*.ts+(|x)"
    ],
    "exclude": [
        "*.d.ts",
        "**/*.d.ts"
    ],
    "abortOnError": true,
    "rollupCommonJSResolveHack": false,
    "typescript": "version 2.8.4",
    "useTsconfigDeclarationDir": false,
    "tsconfigOverride": {},
    "transformers": [],
    "tsconfigDefaults": {}
}
rpt2: rollup config:
{
    "external": [
        "vue",
        "",
        ""
    ],
    "inlineDynamicImports": false,
    "input": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue\\src\\index.ts",
    "chunkGroupingSize": 5000,
    "perf": false,
    "plugins": [
        {
            "name": "rpt2"
        },
        {
            "name": "VuePlugin"
        }
    ],
    "entry": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue\\src\\index.ts"
}
rpt2: built-in options overrides: {
    "noEmitHelpers": false,
    "importHelpers": true,
    "noResolve": false,
    "noEmit": false,
    "inlineSourceMap": false,
    "outDir": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue/.rpt2_cache/placeholder",
    "moduleResolution": 2,
    "declarationDir": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue"
}
rpt2: parsed tsconfig: {
    "options": {
        "module": 5,
        "moduleResolution": 2,
        "target": 1,
        "lib": [
            "lib.dom.d.ts",
            "lib.es2015.d.ts"
        ],
        "esModuleInterop": true,
        "sourceMap": true,
        "declaration": true,
        "noEmitHelpers": false,
        "importHelpers": true,
        "noResolve": false,
        "noEmit": false,
        "inlineSourceMap": false,
        "outDir": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue/.rpt2_cache/placeholder",
        "declarationDir": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue",
        "configFilePath": "C:\\Users\\Saran\\my-projects\\rolup-vue-ts-issue/tsconfig.json"
    },
    "fileNames": [
        "C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/index.ts",
        "C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/sfc.d.ts"
    ],
    "typeAcquisition": {
        "enable": false,
        "include": [],
        "exclude": []
    },
    "raw": {
        "compilerOptions": {
            "module": "es2015",
            "moduleResolution": "node",
            "target": "es5",
            "lib": [
                "dom",
                "es2015"
            ],
            "esModuleInterop": true,
            "sourceMap": true,
            "declaration": true
        },
        "include": [
            "src"
        ]
    },
    "errors": [],
    "wildcardDirectories": {
        "C:/Users/Saran/my-projects/rolup-vue-ts-issue/src": 1
    },
    "compileOnSave": false,
    "configFileSpecs": {
        "includeSpecs": [
            "src"
        ],
        "validatedIncludeSpecs": [
            "src"
        ],
        "wildcardDirectories": {
            "C:/Users/Saran/my-projects/rolup-vue-ts-issue/src": 1
        }
    }
}
rpt2: included:
'[
    "*.ts+(|x)",
    "**/*.ts+(|x)"
]'
rpt2: excluded:
'[
    "*.d.ts",
    "**/*.d.ts"
]'
rpt2: Ambient types:
rpt2:     C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/sfc.d.ts
rpt2:     C:/Users/Saran/my-projects/rolup-vue-ts-issue/node_modules/@types/estree/index.d.ts
rpt2:     C:/Users/Saran/my-projects/rolup-vue-ts-issue/node_modules/@types/node/index.d.ts
rpt2: ambient types changed, redoing all semantic diagnostics
rpt2: transpiling 'C:\Users\Saran\my-projects\rolup-vue-ts-issue\src\index.ts'
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/code/cache/9d9555d93b34027372939bd4a0a4dc41c41e13ac'
rpt2:     cache miss
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/syntacticDiagnostics/cache/9d9555d93b34027372939bd4a0a4dc41c41e13ac'
rpt2:     cache miss
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/semanticDiagnostics/cache/9d9555d93b34027372939bd4a0a4dc41c41e13ac'
rpt2:     cache miss
rpt2: generated declarations for 'C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/index.ts'
rpt2: transpiling 'C:\Users\Saran\my-projects\rolup-vue-ts-issue\src\components\Hello.vue?rollup-plugin-vue=script.ts'
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/code/cache/53ea992621b40f9ced3a2ea5f2f0b86e2cb028b1'
rpt2:     cache miss
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/syntacticDiagnostics/cache/53ea992621b40f9ced3a2ea5f2f0b86e2cb028b1'
rpt2:     cache miss
rpt2:     cache: 'C:\Users\Saran\my-projects\rolup-vue-ts-issue/.rpt2_cache/022f423b186edc509d0bfc04874ea603a25c1eb2/semanticDiagnostics/cache/53ea992621b40f9ced3a2ea5f2f0b86e2cb028b1'
rpt2:     cache miss
rpt2: generated declarations for 'C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/components/Hello.vue?rollup-plugin-vue=script.ts'
rpt2: generating target 1
rpt2: rolling caches
rpt2: writing declarations for 'C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/index.ts' to 'C:\Users\Saran\my-projects\rolup-vue-ts-issue\dist\index.d.ts'
rpt2: writing declarations for 'C:/Users/Saran/my-projects/rolup-vue-ts-issue/src/components/Hello.vue?rollup-plugin-vue=script.ts' to 'C:\Users\Saran\my-projects\rolup-vue-ts-issue\dist\components\Hello.vue?rollup-plugin-vue=script.d.ts'

最有用的评论

好的,现在试试大师。 仍然存在//# sourceMappingURL=和 .d.ts.map 映射本身引用完整块名称的问题,这可能会混淆某些工具。

@znck单个 vue 文件可以包含多个打字稿块,并且 vue 插件会将它们变成单独的虚拟模块吗?

所有11条评论

现在应该在 master 中修复——我现在忽略 vue 模块的声明。 另一种选择是在 ? 并写出*.vue.d.ts我猜。

好的。 谢谢你。 🙇‍♀
ENOENT 错误现在消失了。

我不确定来自 Vue 文件的声明是否重要。
也许@znck可以发表意见?
或者任何看到这个问题的 Vue + TypeScript 开发人员?

我也得到了这个声明设置为真。 我没有使用 vue 插件。 我认为这是因为我的文件路径包含一个空格,从您之前的修复来看。

@hollyleaves您可以发布详细信息或打开一个单独的案例吗? 空格应该是一个有效的字符。

声明文件很重要。
@ezolenko @gluons你能告诉我是什么阻止了声明文件的生成吗?

@znck

@ezolenko已在 f0e466c89f288f5b7434a513370201ef9da56aff 中临时修复了此问题,Vue 文件的声明将被忽略。
它暂时没有写在 dist 目录中。

@znck应该将Hello.vue的声明命名为Hello.vue.d.ts吗? 所有的工具都会正确地拿起它吗?

我不能将它们写成Hello.vue?rollup-plugin-vue=script.d.ts因为?是 Windows 文件路径的无效字符。

?之后的部分用于引用 vue 文件中的块,您应该将其删除。 我不确定声明文件是否应该命名为Hello.d.tsHello.vue.d.ts 。 ( @ktsn WDYT?)

也许Hello.vue.d.ts
我不确定最终的d.ts输出是什么样子,但是由于大多数 TS 用户为 SFC 编写了带有扩展名 ( .vue ) 的导入语句,因此声明文件可能还需要.vue

好的,现在试试大师。 仍然存在//# sourceMappingURL=和 .d.ts.map 映射本身引用完整块名称的问题,这可能会混淆某些工具。

@znck单个 vue 文件可以包含多个打字稿块,并且 vue 插件会将它们变成单独的虚拟模块吗?

每个文件只有一个脚本(打字稿)块。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

eddow picture eddow  ·  14评论

brandon-leapyear picture brandon-leapyear  ·  7评论

kyle-johnson picture kyle-johnson  ·  10评论

PavaniVaka picture PavaniVaka  ·  12评论

mikob picture mikob  ·  4评论