Это мой оригинальный WebPack конфигурационный файл, состоящий из двух различных конфигураций, которые используются оба:Webpack не всегда может решить Загрузчик TS
const ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports = [{
entry: __dirname + '/src/browser/main',
output: {
path: __dirname + '/dist/browser',
filename: 'bundle.js'
},
resolve: {
extensions: ['', '.js', '.ts'] // '' is needed to find modules like "jquery"
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts'
}
]
}
}, {
entry: ['babel-polyfill', __dirname + '/src/app/browser/app'],
output: {
path: __dirname + '/dist/app/browser',
filename: 'bundle.js'
},
resolve: {
root: ['./node_modules', './src'],
extensions: ['', '.js', '.ts'] // '' is needed to find modules like "jquery"
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts'
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style', 'css!sass')
}
]
},
plugins: [
new ExtractTextPlugin('bundle.css')
]
}]
Даже если все мои импорта принимаются, например, Atom (текст редактор с машинопись плагин), в настоящее время только следующие альтернативные работы:
const ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports = [{
entry: __dirname + '/src/browser/main',
output: {
path: __dirname + '/dist/browser',
filename: 'bundle.js'
},
resolve: {
extensions: ['', '.js', '.ts'] // '' is needed to find modules like "jquery"
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts'
}
]
}
}, {
entry: ['babel-polyfill', __dirname + '/src/app/browser/app'],
output: {
path: __dirname + '/dist/app/browser',
filename: 'bundle.js'
},
resolve: {
root: ['./node_modules', './src'],
extensions: ['', '.js', '.ts'] // '' is needed to find modules like "jquery"
},
module: {
loaders: [
{
test: /\.ts$/,
loader: require.resolve('ts-loader')
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style', 'css!sass')
}
]
},
plugins: [
new ExtractTextPlugin('bundle.css')
]
}]
(обратите внимание на require.resolve('ts-loader')
)
Как вы можете видеть, в первую config 'ts'
все еще присутствует (так как он все еще работает), а во втором я должен был заменить его на require.resolve('ts-loader')
. Теперь я пытаюсь найти причину этого требования. Я помню, что я был вынужден использовать require.resolve
в других проектах, но я никогда не знал о причине.
Незаметная строка кода, который делает разницу (второй конфигурации):
import * as dateTime from 'lib/date-time/date-time'
Если я комментирую, он снова работает, используя 'ts'
.
В моей файловой системе путь lib/date-time/date-time.ts находится непосредственно под ./src (что упоминается в массиве resolve/root). И это не первый импорт, зависящий от массива resolve/root.
Webpack выход с сообщением об ошибке:
> webpack
ts-loader: Using [email protected] and /.../src/app/browser/tsconfig.json
ts-loader: Using [email protected] and /.../src/browser/tsconfig.json
Hash: 5058e7029f1c0243a269161aa4ddda242a3d33a0
Version: webpack 1.14.0
Child
Hash: 5058e7029f1c0243a269
Version: webpack 1.14.0
Time: 3165ms
Asset Size Chunks Chunk Names
bundle.js 283 kB 0 [emitted] main
+ 4 hidden modules
Child
Hash: 161aa4ddda242a3d33a0
Version: webpack 1.14.0
Time: 3670ms
Asset Size Chunks Chunk Names
bundle.js 617 kB 0 [emitted] main
bundle.css 25 kB 0 [emitted] main
[0] multi main 40 bytes {0} [built]
+ 329 hidden modules
ERROR in Cannot find module './node_modules/ts-loader/index.js'
@ ./src/records/departure/departure.ts 2:15-49
Child extract-text-webpack-plugin:
+ 2 hidden modules
Child extract-text-webpack-plugin:
+ 2 hidden modules
Child extract-text-webpack-plugin:
+ 2 hidden modules
Child extract-text-webpack-plugin:
+ 2 hidden modules
Могу ли я спросить, если ли изменить вы 'корень: [ './node_modules',' ./src '],' к 'root: path.resolve ('./ src'),' будет ли он работать? (без 'require.resolve') –
Он делает. Таким образом, это имеет какое-то отношение к моим «корневым» путям. (Одна из частей, которые я не совсем понял в документах Webpack.) Можете ли вы подробно рассказать о том, почему теперь он находит загрузчика? И почему это влияет на 'import * как dateTime из 'lib/date-time/date-time'', но не на все другие импорты без полных относительных/абсолютных путей? – ideaboxer