我关注package.json
:
{
"name": "browserify-test",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"build:tsc": "tsc --outDir dist",
"build:browser": "browserify src/index.ts -p tsify --standalone MyLib > dist/myLib.js"
},
"devDependencies": {
"browserify": "^14.0.0",
"tsify": "^3.0.0",
"typescript": "^2.1.5"
}
}
关注tsconfig.json
:
{
"compilerOptions": {
"noImplicitAny": true,
"module": "commonjs",
"target": "ES5",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"declaration": true
}
}
档案src/evets.d.ts
:
export interface MyEvent {
name: string
}
最后进入点src/index.js
:
import * as events from './events';
export class MyLibrary {
public test(eventInstance: events.MyEvent) {
console.log(eventInstance);
console.log(events);
}
}
构建纯打字稿版本有效。所以命令npm run build:tsc
运行完美,但尝试使用browserify构建,因此调用npm run build:browser
我得到以下错误:
> browserify-test@1.0.0 build /home/aszmyd/tmp/browserify-test
> browserify src/index.ts -p tsify --standalone MyLib > dist/myLib.js
Error: Cannot find module './events' from '/home/aszmyd/tmp/browserify-test/src'
浏览器似乎无法正确使用扩展名为d.ts
的类型定义文件。
上述示例 WORKS 有两种情况:
在我index.ts
i导入时:import * as events from './events.d;
(请注意结尾 .d )
当我删除console.log(events);
行(?!)时 - 它如何使用events.***
类型但不能使用整个集合(别名)?
我认为我在这里错过了一些假人,但我缺乏想法。
答案 0 :(得分:1)
运行
import * as events from './events';
尝试导入名为' events.ts'的打字稿文件。与导入文件位于同一目录中。那是因为它是相对路径。
(导入./events.d
会在同一目录中导入events.d.ts
,解释原因"它有效")
要导入外部模块,将使用模块名称(而不是路径)创建import语句。因此,对于名为' events'的模块,import语句将是
import * as events from 'events'
导入外部模块时,编译器将查找定义文件,"输入"模块。根据模块的结构,这个文件可能是一个内部模块定义,看起来就像你的事件d .ts'或外部模块定义文件,更像是
declare module 'events' {
export interface MyEvent {
name: string
}
}