gpt4 book ai didi

typescript - Webpack 4,Vue 同时使用 Typescript 类和 JS 代码。

转载 作者:行者123 更新时间:2023-12-01 03:11:02 25 4
gpt4 key购买 nike

我正在将 JS 文件迁移到 Typescript,我的目标是能够在 Vue 中同时使用 JS 和 Typescript 类。我知道,我可以将 Vue 脚本转换为 Typescript,但我现在不想这样做。

问题出现在一个component.vue文件中:

this.exceptionHandler = app.resolve('ExceptionHandler');

我在浏览器控制台中得到的错误是这样的(编译没问题):
"TypeError: Cannot call a class as a function"

ExceptionHandler 在 TypeScript .ts 文件中定义。

问题是:是否可以先将 TS 代码转译为 JS ES6,然后将代码放在一起,然后在所有内容上运行 Babel 将其编译为 ES5?

我在 TS 配置中使用这些选项:
"lib": ["es7", "es6", "es5", "dom"],
"types": ["reflect-metadata"],
"module": "commonjs",
"target": "es6",

和 Webpack 4 配置:
        {
test: /\.ts(x?)$/,
loader: 'babel-loader?presets[]=es2015!ts-loader',
exclude: [
"node_modules",
"vendor",
"app",
"public"
]
},

当我只使用 ts-loader 时,代码运行良好,但编译后的 JS 代码版本是 ES6 而不是 ES5。

最佳答案

这可能对 Webapack 4 的新手有用。我的工作 webpack 配置文件如下所示:

const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");


let devMode = process.env.NODE_ENV === 'development';

let webUrl = 'http://my-project.localhost/';
if (process.env.NODE_ENV === 'production') {
webUrl = 'https://my-project.com/';
}
else if (process.env.NODE_ENV === 'development') {
webUrl = 'http://my-project.localhost/';
}

module.exports = {
mode: 'development',
devtool: 'inline-source-map',
entry: {
'frontApps': './resources/assets/js/frontApps.ts',
'backAppsAdmin': './resources/assets/js/backAppsAdmin.ts',
'styles' : './resources/assets/sass/styles.scss',
'adminBack' : './resources/assets/sass/admin back/adminBack.scss',
},
module: {
rules: [

{
test: /\.(js|jsx)$/,
exclude: /(node_modules|bower_components)/,
use: [{
loader: "babel-loader",
options: {
presets: ['@babel/preset-env']
}
}]
},

{
test: /\.vue$/,
loader: 'vue-loader',

options: {
loaders: {
js: 'babel-loader',

css: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options : {
url: false
}
}
],
fallback: 'vue-style-loader',
}),
}
}
},

{
test: /\.ts(x?)$/,
loader: 'babel-loader?presets[]=@babel/preset-env!ts-loader',
exclude: [
"node_modules",
"vendor",
"app",
"public"
]
},

{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options : {
url : false,
sourceMap: devMode
}
},
{
loader: 'sass-loader',
options : {
processCssUrls : false,
sourceMap: devMode
}
}
],
}
]
},
output : {
filename : 'js/[name].js',
chunkFilename: 'js/[name].js',
path: path.resolve(__dirname, 'public'),
publicPath: webUrl,
},

optimization: {
splitChunks: {
cacheGroups: {
vendor : {
test : '/node_modules/',
chunks: 'all',
name: 'vendor',
priority: 10,
enforce: true
}
}
},
},

resolve: {
extensions: [ '.tsx', '.ts', '.js', '.vue' ],
alias: {
vue: 'vue/dist/vue.esm.js'
}
},

plugins: [
new VueLoaderPlugin(),

new MiniCssExtractPlugin({
filename: "css/[name].css",
chunkFilename: "css/[id].css"
}),

new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
}),

new webpack.ProvidePlugin({
'regeneratorRuntime': 'regenerator-runtime/runtime'
}),
]
};

如果要在单个文件 Vue 组件中使用 SCSS,请使用以下命令:
<style lang="scss" type="text/scss"  scoped>

</style>

关于typescript - Webpack 4,Vue 同时使用 Typescript 类和 JS 代码。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52247594/

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