staffID
@staffID

TypeScript настройка alias'ов?

src --
       -- modules
           -- module1
           -- module2
       -- app
            -- main.ts
package.json
tsconfig.json
webpack.config.js

webpack.config.js:
'use strict';

const webpack           = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const path              = require( 'path' );

module.exports = {
  entry: {
    common: './src/app/common.ts',
    main: './src/app/main.ts'
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js'],
    alias: {
      module1: path.resolve(__dirname, 'src/modules/module1'),
      module2: path.resolve(__dirname, 'src/modules/module2')
    }
  },
  module: {
    loaders: [
      { test: /\.tsx?$/, loader: 'ts-loader' }
    ],
    rules: [
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      },
      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: [ 'css-loader', 'sass-loader' ]
        })
      }
    ]
  },
  plugins: [
  ]
}


Почему alias подтягивается верно:
то есть это в main.ts работает:
import {AllSiteData} from 'module1'
console.log(AllSiteData);


в консоли браузера всё верно:
{
logo: 'p.png',
title: 'Site name'
}


А в консоли nodejs выдается вот такое:
error TS2307: Cannot find module 'module1'.

Однако если я поправлю на в main.ts, на:
import {AllSiteData} from '../modules/module1';
То всё работает.

Как правильно настроить а точнее достроить alias, чтобы их еще и typescript видел.
Вот мой tsconfig.js:
{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "experimentalDecorators": true,
    "jsx": "react",
    "allowJs": true,
    "alwaysStrict": true,
    "lib": [
      "es2015",
      "dom"
    ],
    "paths": {
      "module1": ["src/modules/module1"],
      "module2": ["src/modules/module2"]
    }
  }
}
  • Вопрос задан
  • 10981 просмотр
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Если попробовать скомпилировать приведенный вами код с помощью команды tsc в корне проекта, то он незамедлительно показывает ошибку:
tsconfig.json(15,5): error TS5060: Option 'paths' cannot be used without specifying '--baseUrl' option.


Ну и собственно при добавлении "baseUrl": "./" в tsconfig всё работает:)

P.S. Спасибо, я теперь знаю, что tsc поддерживает алиасы:)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы