在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
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']
};
{
"compilerOptions": {
"module": "es2015",
"moduleResolution": "node",
"target": "es5",
"lib": [
"dom",
"es2015"
],
"esModuleInterop": true,
"sourceMap": true,
"declaration": true
},
"include": [
"src"
]
}
{
"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"
}
}
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'
现在应该在 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.ts
或Hello.vue.d.ts
。 ( @ktsn WDYT?)
也许Hello.vue.d.ts
?
我不确定最终的d.ts
输出是什么样子,但是由于大多数 TS 用户为 SFC 编写了带有扩展名 ( .vue
) 的导入语句,因此声明文件可能还需要.vue
。
好的,现在试试大师。 仍然存在//# sourceMappingURL=
和 .d.ts.map 映射本身引用完整块名称的问题,这可能会混淆某些工具。
@znck单个 vue 文件可以包含多个打字稿块,并且 vue 插件会将它们变成单独的虚拟模块吗?
每个文件只有一个脚本(打字稿)块。
最有用的评论
好的,现在试试大师。 仍然存在
//# sourceMappingURL=
和 .d.ts.map 映射本身引用完整块名称的问题,这可能会混淆某些工具。@znck单个 vue 文件可以包含多个打字稿块,并且 vue 插件会将它们变成单独的虚拟模块吗?