我从webpack收到以下错误。
> ./wwwroot/js/admin/infrastructure/typeaheadComponent.ts中的错误 找不到模块:错误:无法解决' typeahead'在......
我安装了以下
npm install typeahead.js
npm install @types/typeahead
我的打字稿如下,使用node
模块解析。
import { module } from "angular";
import "typeahead";
// necessary to import typeahead into JQuery, as otherwise
// typeahead below is not defined.
class TypeAheadController {
foo(e) {
$(e).typeahead(...)
}
}
这会生成如下javascript:
"use strict";
var angular_1 = require("angular");
require("typeahead");
var TypeAheadController = (function () { ...
我的webpack.config.js如下:
module.exports = {
context: __dirname,
entry: [
"./app.ts",
"./tab.ts",
"./client/clientService.ts",
"./client/clientSearchComponent.ts",
"./infrastructure/messageComponent.ts",
"./infrastructure/typeaheadComponent.ts",
"./url.ts"],
output: {
filename: "./wwwroot/js/admin/admin.js"
},
devtool: "source-map",
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader' }
]
}
};
导入gulp任务。
如何指定typeahead
位于node_modules/typeahead.js/dist/typeahead.bundle.js
答案 0 :(得分:0)
该模块名为typeadhead.js
,因此您还需要导入typeahead.js
,而不是typeahead
。
import "typeahead.js";
导入始终与您使用npm安装它的名称相同。它甚至不特别,只需查看node_modules
并找到具有给定名称的目录。然后它查看package.json
并导入main
field中指定的文件。另请参阅Node.js - Folders as Modules。
您可以使用resolve.alias
来更改导入的名称,但在这种情况下,没有充分的理由这样做。
答案 1 :(得分:0)
您可以使用别名来解决此问题。在webpack.config.js
中更改内容的最小示例:
module.exports = {
/* ... everything you currently have */
resolve: {
alias: {
typeahead: 'typeahead.js'
}
}
}
答案 2 :(得分:0)
我通过以下更改解决了这个问题。
您需要分别导入Bloodhound和Typeahead。为此,请编辑您的webpack.config.js
resolve: {
extensions: ['.js', '.ts'],
alias: {
typeahead: 'corejs-typeahead/dist/typeahead.jquery.min.js',
bloodhound: 'corejs-typeahead/dist/bloodhound.min.js'
}
},
然后在您的.ts
文件中:
import "typeahead";
import * as Bloodhound from "bloodhound";