加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 如何在React应用程序中的typescript文件中导入js模块

发布时间:2020-12-15 20:48:44 所属栏目:百科 来源:网络整理
导读:我正在我的React app中集成typescript,它有大量的代码.我有一些应用程序级别的HOC,我将其应用于React组件: import React from 'react';import HOC1 from 'app/hocs/hoc1';import compose from 'recompose/compose;class MyComponent from React.Component {
我正在我的React app中集成typescript,它有大量的代码.我有一些应用程序级别的HOC,我将其应用于React组件:
import React from 'react';
import HOC1 from 'app/hocs/hoc1';
import compose from 'recompose/compose;

class MyComponent from React.Component {
     ...component stuff...
}

export default compose(HOC1())(MyComponent);

但是现在我在我的应用程序中添加了typescript,每当我导入时

import HOC1 from 'app/hocs/hoc1';

它说

TS2307: Cannot find module 'app/hocs/hoc1'.

我不想为所有HOC添加类型定义.什么是解决方案以及为什么我收到此错误?

[编辑]我也在tsconfig中使用baseUrl.我的文件夹结构是

/Project/configs/tsconfig
/Project/src/app/hocs

在tsconfig中,我通过this文档将baseUrl作为../src.

另一个编辑
我的webpack配置看起来像:

{
        test: /.(t|j)sx?$/,loader: 'happypack/loader?id=jsx-without-proptypes',include: [
          path.resolve(__dirname),path.resolve(__dirname,'../src'),],},

整个webpack配置看起来像

const config = {
  context: path.resolve(__dirname,mode: NODE_ENV,optimization: {
    splitChunks: false,nodeEnv: NODE_ENV,minimize: false,node: {
    net: 'empty',output: {
    path: path.resolve(__dirname,'../build/public/assets'),publicPath: '/assets/',sourcePrefix: '  ',pathinfo: DEBUG,//https://webpack.js.org/configuration/output/#output-pathinfo
  },module: {
    noParse: [/html2canvas/],rules: [
      {
        test: /.tsx?$/,enforce: 'pre',use: { loader: 'awesome-typescript-loader' },...shimLoaders,...selectiveModulesLoader,{
        test: /.(t|j)sx?$/,{
        test: /.jsx?$/,loader: 'happypack/loader?id=jsx-without-lodash-plugin',include: [
          path.resolve(__dirname,'../src/app/modules/insights/'),exclude: /node_modules/,loader: 'happypack/loader?id=jsx-with-proptypes',loader: 'babel-loader',query: {
          presets: [['env',{ include: ['babel-plugin-transform-es2015-template-literals'] }]],{
        test: /.css$/,use: getCssLoaders({
          pwd: PWD,debug: DEBUG,}),...getScssRules(DEBUG,PWD),{
        test: /.less$/,use: [DEBUG ? 'css-loader' : 'css-loader?minimize','less-loader'],{
        test: /.txt$/,loader: 'raw-loader',{
        test: /.svg$/,loader: 'spr-svg-loader',{
        test: /.(png|jpg|jpeg|gif)$/,loader: 'url-loader',query: {
          name: DEBUG ? '[path][name].[ext]' : '[hash].[ext]',// ?[hash]
          limit: 10000,{
        test: /.(woff|woff2)$/,loader: 'url-loader?name=fonts/[name].[ext]&limit=65000&mimetype=application/font-woff',{
        test: /.(otf|ttf)$/,loader: 'url-loader?name=fonts/[name].[ext]&limit=65000&mimetype=application/octet-stream',{
        test: /.eot$/,loader: 'url-loader?name=fonts/[name].[ext]&limit=65000&mimetype=application/vnd.ms-fontobject',{
        test: /.(wav|mp3)$/,loader: 'file-loader',// ?[hash]
        },{
        test: /.pug/,loader: 'pug-loader',{
        test: /.html$/,include: /src/app/,loader: StringReplacePlugin.replace({
          replacements: [
            {
              //Replaces ES6 strings from languagePack to simple string
              pattern: /__(s*`([^`]*)`s*)/gi,replacement: (match,p1) => {
                let replacedStr = p1;
                replacedStr = replacedStr.replace(new RegExp('${([w.:-]+)}','g'),'' + $1 + '');
                return `'${replacedStr}'`;
              },{
              //Following methods - look out carefully for the *quotes* (single/double)
              //doing what i18nPlugin would do for html files - with the *single* quotes
              pattern: /__(s*'(.+?)'s*)/g,p1) => {
                const replacedStr = p1;
                return `'${replacedStr}'`;
              },{
              //doing what i18nPlugin would do for html files - with the *double* quotes
              pattern: /__(s*"(.+?)"s*)/g,p1) => {
                const replacedStr = p1;
                return `"${replacedStr}"`;
              },resolve: {
    modules: [
      path.resolve(PWD),path.resolve(PWD,'..'),'node_modules','web_modules','src',extensions: ['.js','.jsx','.ts','.tsx','.json','.webpack.js','.web.js'],alias: ALIAS,// symlinks: false,//https://webpack.js.org/configuration/resolve/#resolve-symlinks,https://github.com/webpack/webpack/issues/1643
  },plugins: [getProvidePlugin(),getLoaderOptionPlugin({ debug: DEBUG }),...getHappypackPlugin({ debug: DEBUG })],resolveLoader: {
    modules: ['node_modules','../../node_modules'),'./config/loaders/')],alias: {
      text: 'raw-loader',// treat text plugin as raw-loader
      jst: 'ejs-loader',style: 'style-loader',imports: 'imports-loader',bail: !DEBUG,watch: DEBUG,cache: DEBUG,stats: DEBUG ?
    {
      colors: true,reasons: false,hash: VERBOSE,version: VERBOSE,timings: true,chunks: false,chunkModules: VERBOSE,cached: VERBOSE,cachedAssets: VERBOSE,performance: true,} :
    { all: false,assets: true,warnings: true,errors: true,errorDetails: false },};

另一个编辑

webpack config定义的别名也没有做到.

https://webpack.js.org/configuration/resolve/#resolve-alias

使用别名

要将导入映射到正确的文件,您需要使用webpack配置中的config.resolve.alias字段.

您的方案中的位置如下所示:

const config = {
  resolve: {
    alias: {
      'app': path.resolve(__dirname,'src/app/'),};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读