Mamy projekt wykorzystujący TypeScript z ts-loader w Webpacka, ponieważ większość rzeczy, których używaliśmy, to definicje typów w Definitely Types (via typings
), ale nie dla tego, którego teraz chcieliśmy użyć: redux-auth
.Jak zaimportować zwykły JS do TypeScript (bez typów)
Początkowo nie miałem module
zdefiniowane w tsconfig.json i importowanie go poprzez
import { EmailSignInForm } from "redux-auth/bootstrap-theme"
spowodowało Cannot find module
. Następnie czytamy, że używanie notacji CommonJS może pomóc, ale nie było, ponieważ TS nie wiedział o członkach importowanego modułu (Property 'EmailSignInForm' does not exist on type '{}'
). Używanie ścieżki względnej również nie przynosi niczego pożytecznego.
Również przeczytałem w this article about TS 1.8, że powinien teraz obsługiwać zwykłe pliki JS, ale nie wyjaśnia dokładnie, w jaki sposób. allowJs jest włączone.
Jak mogę zaimportować ten moduł? Dzięki!
To nasze webpack.config.js:
var webpack = require('webpack');
var fail = require('webpack-fail-plugin');
module.exports = {
entry: './static/files/app/main.tsx',
output: {
path: './static/files/',
filename: 'bundle.js',
sourceMapFilename: '[file].map'
},
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
},
module: {
loaders: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
},
]
},
devtool: 'source-map',
plugins: [
fail,
new webpack.ProvidePlugin({
//Promise: 'exports?global.Promise!es6-shim',
fetch: 'imports?this=>global!exports?global.fetch!whatwg-fetch'
})
]
};
a nasz tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"jsx": "react",
"sourceMap": true,
"allowJs": true,
"noEmitOnError": true
},
"files": [
"typings/browser.d.ts"
],
"exclude": [
"typings/main.d.ts",
"typings/main",
"node_modules"
]
}
("module": "commonjs"
był tymczasowy przetestować notacji CommonJS)
UPDATE :
OK, więc jeśli I declare var require: any
i używam ścieżki względnej w require()
, mogę ją zaimportować, chociaż wątpię, że jest to zamierzony sposób. Zabawne teraz otrzymuję tę wiadomość od Webpack:
WARNING in ./~/encoding/lib/iconv-loader.js
Critical dependencies:
9:12-34 the request of a dependency is an expression
@ ./~/encoding/lib/iconv-loader.js 9:12-34
ERROR in ./~/iconv-lite/encodings/tables/gb18030-ranges.json
Module parse failed: ./node_modules/iconv-lite/encodings/tables/gb18030-ranges.json Line 1: Unexpected token :
You may need an appropriate loader to handle this file type.
To jest zamierzony sposób z tego, co zbieram. – Angad
Moja odpowiedź tutaj może pomóc: http://stackoverflow.com/questions/37656592/define-global-variable-with-webpack/40416826#40416826 – prograhammer