我已经减少了一个问题,我看到了两个简单的库:
我试图创建两个不同的库 - 一个是较低级别的库,另一个是更高级别的库,就暴露给开发人员的概念而言。
两者都是使用Typescript编写的,并使用webpack构建。两者都旨在能够在Node和Web应用程序中使用。
我遇到的问题是我基本上将Node构建为"默认"构建,Web构建是特殊情况,可以这么说。在更高级别的库中,我将较低级别的库设置为package.json中的依赖项,然后导入捆绑的Web构建。这似乎有效但输出错误。
这是"较低级别"图书馆:https://github.com/hamchapman/typescript-lib-webpack-test
这是"更高级别"图书馆:https://github.com/hamchapman/typescript-lib-webpack-sdk-test
需要在两个平台之间切换的模块是websocket库:Node设置中的faye-websocket和Web设置中的浏览器Websocket
。我已经使用webpack使用此配置设置(在较低级别的库中):
const path = require('path')
module.exports = {
entry: './src/client',
output: {
library: 'MultiPlatformClient',
libraryTarget: 'umd',
filename: "target/web.js"
},
devtool: 'source-map',
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'],
modulesDirectories: ['node_modules', 'transports'],
alias: {
'ws': 'ws.web'
}
},
module: {
loaders: [
{ test: /\.tsx?$/, loader: 'ts-loader' }
],
preLoaders: [
{ test: /\.js$/, loader: 'source-map-loader', exclude: /node_modules/ }
]
}
}
然后在client.ts
:中按照以下要求
import WebSocket from "ws";
export default class Client {
public token: string
public ws: WebSocket
constructor(token: string) {
this.token = token
this.ws = new WebSocket('ws://test.com', [], {})
}
}
这在低级库中都很好,并且成功构建且没有错误。
但是,这是在更高级别库的package.json中:
"dependencies": {
"node-libs-browser": "^1.0.0",
"multi-platform-client": "git+ssh://git@github.com:hamchapman/typescript-lib-webpack-test.git"
}
在sdk-client.ts
文件中
import Client from "multi-platform-client/web";
export default class SDKClient {
public client: Client
constructor(token: string) {
this.client = new Client(token)
}
}
当我运行webpack时,我得到了这个输出:
webpack
ts-loader: Using typescript@1.8.10 and /Users/Hami/Pusher/typescript-higher-test/tsconfig.json
Hash: 8fef5a551de36ef9403c
Version: webpack 1.13.1
Time: 1633ms
Asset Size Chunks Chunk Names
./dist/bundle.js 4.67 kB 0 [emitted] main
./dist/bundle.js.map 5.61 kB 0 [emitted] main
+ 4 hidden modules
ERROR in ./src/sdk-client.ts
(1,20): error TS2307: Cannot find module 'multi-platform-client/web'.
显示此错误,但构建仍然成功。
这是不正确指定的打字的问题?或者它完全是另一回事?
答案 0 :(得分:0)