Библиотека Typescript для одного глобального файла JavaScript - PullRequest
0 голосов
/ 09 апреля 2019

Я пишу библиотеку Typescript со следующей структурой:

enter image description here

и содержимым файла:

restApi.class.ts

import { restApiOptions } from '../models/rest.options.model';
import { StoreMethods } from '../routes/store.methods.class';
import { UserMethods } from '../routes/user.methods.class';

export class RestApi {

  public storeRest: StoreMethods;
  public userRest: UserMethods;

  constructor(private restApiOptions: restApiOptions) {
    .....
  }

  setLanguage(langId: number){
    .....
  }
}

store.methodds.class.ts

import { Observable } from 'rxjs';
import { restApiOptions } from '../models/rest.options.model';
import { routeMethods } from '../core/routeMethods.interface';

export class StoreMethods implements routeMethods {

  constructor(private restApiOptions: restApiOptions) {
    .....
  }

  setLanguage(languageId: number){
   ......
  }

  getStore(storeId: number): Observable<any> {
    .....
  }
}

и public_api.ts

export { RestApi } from './lib/core/restApi.class'

библиотека предназначена для использования в качестве зависимости в проекте Angular2 +, поэтому у меня есть файл tsconfig со следующей конфигурацией для его переноса и создания файлов определений

{
"compilerOptions": {
    "outDir": "./dist/",
    "declaration": true,
    "module": "commonjs",
    "target": "es5",
    "lib": [
        "es2017",
        "dom",
        "es2015",
        "es5",
        "es6"
    ]
},
"exclude": [
    "node_modules",
]

}

Проблема, с которой я столкнулся, заключается в том, что эту библиотеку также необходимо использовать в простом проекте javascript es5 «по старинке», то есть, включая файл библиотеки javascript в тег сценария и используя его таким образом, какthis:

var myRestApi = new RestApi(options)

Я использую webpack для объединения всех файлов в один файл bundle.js, но после генерации этого файла и включения его в проект у меня нет доступа к классу RespApi.

это мой webpack.config.js

const path = require('path');

module.exports = [{
  entry: './src/public_api.ts',
  module: {
    rules: [{
        test: /\.tsx?$/,
        use:  [{
            loader : 'ts-loader',
            options:{
                configFile : 'tsconfig.json'
            }
        }],
        exclude: /node_modules/
    }]
  },
  resolve: {
    extensions: ['.ts', '.js', '.tsx']
  },
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dev')
  }
}];

есть ли способ перенести липерейти в один файл JavaScript и получить доступ к классу RestApi из глобального ??

1 Ответ

1 голос
/ 09 апреля 2019

На сайте веб-пакета есть официальное руководство . Я рекомендую вам прочитать это.

Вот шпаргалка. Добавьте два поля к вашему webpack.config.js.

webpackConfig.output.library = "RestApi"
webpackConfig.output.libraryTarget = "var"

Впрочем, скоро наступит. Поскольку вы экспортируете свой модуль как именованный модуль в public_api.js, пользователь может получить к нему доступ только через window.RestApi.RestApi. Не экспериментируя, я не совсем уверен, как решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...