Estoy tratando de usar una enumeración de una biblioteca que hice en otro proyecto. La biblioteca está hecha con Vue y mecanografiado, junto con el paquete acumulativo, el proyecto está hecho con Synfony y el frente con Vue y mecanografiado también, construido con Webpack Encore.
La biblioteca es una dependencia de mi proyecto, así que intento importar la enumeración de esta manera: import { MyEnum } from 'myLibrary/src/enum/MyEnum';
Y la enumeración se ve así
// node_modules/myLibrary/src/enum/MyEnum.ts export enum MyEnum { One = 'one', Two = 'two', Three = 'three' }
Pero cuando construí, recibí este error (con Webpack Encore de Symfony):
ERROR Failed to compile with 1 errors 4:37:05 PM Error loading ./node_modules/myLibrary/src/enum/MyEnum.ts FIX To process TypeScript files: 1. Add Encore.enableTypeScriptLoader() to your webpack.config.js file.
Obviamente ya agregué enableTypeScriptLoader()
en webpack.config.js, y no sé cómo resolver esto.
Si creo el mismo archivo de enumeración en mi proyecto y lo importo, funciona, pero tengo que mantenerlo en mi biblioteca y no quiero duplicar el código. E importo interfaces de la misma biblioteca de la misma manera, y funciona bien.
Intenté cosas que no funcionan:
export const enum
funciona un poco, pero obtengo el TS2475: 'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.
error, y tengo que volver a declarar la enumeración en otro objeto para usarlo en mi plantilla:/export declare enum
pero aún obtener el Add Encore.enableTypeScriptLoader()
Alguna idea de como resolver esto?
Tengo otro mensaje de error en mi navegador que agrega información:
Module parse failed: Unexpected token (4:7) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders > export enum MyEnum { | One = 'one', | Two = 'two'
También pruebo importar la misma enumeración de la misma biblioteca en un proyecto nuevo hecho con Vue Cli, y no tengo ningún error. Estoy bastante seguro de que el problema proviene de Webpack Encore.
Solución encontrada, algunos detalles en el número de este Webpack Encore: https://github.com/symfony/webpack-encore/issues/1060
Y aquí está la solución:
allowTsInNodeModules
en las opciones de enableTypeScriptLoader
: Encore.enableTypeScriptLoader((options) => { options.allowTsInNodeModules = true; });
exclude
que excluye node_modules y excluye node_modules pero mis propios módulos (donde @myCompany
es la carpeta en node_modules donde están mis propios módulos. Encore.configureLoaderRule('typescript', (rule) => { rule.exclude = /node_modules\/(?!@myCompany)/; });
Esto genera una advertencia al compilar, pero por ahora es la única forma que encontré para solucionarlo.