gpt4 book ai didi

typescript - 如何在没有复杂构建系统的情况下将 Vue 与 Typescript 一起使用?

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:05 24 4
gpt4 key购买 nike

我已经花了 2 天时间对此进行试验,到目前为止还没有取得任何进展。我有一个非常基本的 ASP.NET Core 网站,为 Typescript 2.9 配置。我希望我的前端非常简单,每个页面只有一个 vue 应用程序,没有复杂的构建系统或组件。

我希望获得某种最低限度的配置。这是我当前的 tsconfig.json 文件:

{
"compilerOptions": {
"declaration": true,
"mapRoot": "/js/",
"module": "esnext",
"removeComments": true,
"sourceMap": true,
"target": "esnext"
},
"compileOnSave": true

}

(注意,我已经尝试过 es6、es5 模块,但都没有)

然后,在我的 wwwroot/js 文件夹中,我有 Site.ts,如下所示:

import { Vue } from "./types/vue";

var _mixin: any;
var _vue = new Vue({
el: '#vueheader',
mixins: [_mixin],
data: {
},
methods: {},
mounted: function () {
},
});

在 wwwroot/js/types 文件夹中,我有来自 vue 的 5 个 d.ts 文件,以及 vue.js 文件。 typescript 正确编译成一个 js 文件,但是当我访问主页时,我在 chrome 中收到错误提示“404,找不到文件/types/vue”

这里是编译后的 Site.js:

import { Vue } from "./types/vue";
var _mixin;
var _vue = new Vue({
el: '#vueheader',
mixins: [_mixin],
data: {},
methods: {},
mounted: function () {
},
});
//# sourceMappingURL=/js/Site.js.map

我的 html 有这个链接:

有人有什么想法吗?请不要让我使用像 webpack 这样复杂的构建系统。我不想让 600 多个依赖项使我的构建过程变得臃肿。

最佳答案

这实际上非常简单!我基于我的第一个使用 Require.js 的 Vue TodoMVC 风格的应用程序。您可以为自己的项目进行推断。


最简单的方法是使用不需要捆绑的加载程序,例如 Require.js 或 System.js - 您所要做的就是使用 TypeScript 进行编译。

因为我使用的是 Require.js 和 Vue,所以这是我的 package.json

{
"name": "vue-tutorial",
"version": "1.0.0",
"dependencies": {
"@types/requirejs": "^2.1.28",
"vue": "^2.1.4"
}
}

接下来,我要添加一个tsconfig.json

{
"compilerOptions": {
"outFile": "./built/app.js",
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"module": "amd",
"moduleResolution": "node",
"esModuleInterop": true,
"lib": [
"dom", "es2015"
],
"types": [
"requirejs"
]
},
"include": [
"src"
]
}

让我们分解一下:

  • outFile:TypeScript 会有效地将您的源代码打包到一个文件中(但不是它的依赖项!)。
  • noImplicitAnystrictNullChecksnoImplicitThis:只是一些特定的 --strict 选项我强烈建议你打开至少。
  • module: amd:AMD 是 Require.js 可以理解的模块格式。
  • moduleResolution: node:这使得 TypeScript 可以轻松地从 node_modules 中获取 .d.ts 文件。
  • esModuleInterop:这允许我们使用现代语法导入 Vue。
  • lib:指定您希望在运行时拥有的标准 API。
  • types:.d.ts 文件用于我们不一定要导入的库;我们不导入 Require.js,因为我们希望它在全局范围内可用。

现在我们的index.html:

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8" />
<title>Hello Vue!</title>
</head>

<body>
<div id="app"></div>

<script src="https://unpkg.com/requirejs@2.3.5/require.js"></script>
<script src="./built/app.js"></script>
</body>

</html>

让我们在 src/components/GreetingComponent.ts 中创建我们的第一个组件:

import Vue from "vue";

export default Vue.extend({
template: `<div>Hello {{name}}!</div>`,
props: ["name"],
});

接下来,让我们创建一个index.ts:

import Vue from "vue";
import GreetingComponent from "./components/GreetingComponent";

new Vue({
el: "#app",
template: `<greeting-component name="Steve"></greeting-component>`,
components: {
GreetingComponent
}
});

最后让我们创建一个 Bootstrap 来实际导入您的 require-config.ts:

require.config({
paths: {
// JS library dependencies go here.
// We're using a CDN but you can point to your own assets.
"vue": "https://unpkg.com/vue@2.5.16/dist/vue",
}
});
require(["index"]);

解释:

  • paths 将告诉 Require.js 在您使用裸路径导入 Vue 和其他库时在哪里寻找它们。您可以自定义 Require.js 将在何处找到 Vue,但请记住您必须省略 URL 末尾的 .js
  • 最后调用 require 将加载您的 index 模块以启动您的程序。

运行 tsc,打开 index.html,一切正常!

关于typescript - 如何在没有复杂构建系统的情况下将 Vue 与 Typescript 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50649516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com