工作得很好:
declare var require;
const Quassel = require( 'libquassel/lib/libquassel.js' );
console.log( 'Quassel', Quassel );
看了一下node_module中的libquassel文件夹,发现根目录下没有index.js文件。
如果没有index.js文件,则无法执行以下操作:
require( 'libquassel' );
仅仅因为node不知道要为你拉取什么,所以你需要指定确切的路径,在这种情况下并不糟糕。
另外,请注意最好将declare var require;
移动到位于src文件夹下的您的typings文件中,因为您可能需要再次声明它,所以最好在那里。
编辑:
以下是我尝试实例化Quassel的结果:
const Quassel = require( 'libquassel/lib/libquassel.js' );
console.log( 'Quassel', Quassel );
var quassel = new Quassel( "quassel.domain.tld",
4242,
{ backloglimit : 10 },
function ( next ) {
next( "user", "password" );
} );
console.log( 'quassel', quassel );
以下是我的控制台日志:
但是,我发现libquassel.js内部存在问题,如下所示:
在第10行,他们这样做:
var net = require('net');
查看他们的package.json文件,没有像net
这样的东西,但有net-browserify-alt
;
因此,如果他们将导入更改为:
var net = require('net-browserify-alt'),
一切都会正常工作。
话虽如此,显然你不想编辑你的node_module,但我真的很惊讶这个在angular和webpack之外也能正常工作,因为他们明显提到了一个错误的node_module,如果你搜索一下,只有一个名为net
的包,我看了一下,它是空的和虚假的!!!
** ********** 更新:********** **
需要做什么:
1- 运行 ng eject
这将在你的根目录中生成一个webpack.conf.js
。
2- 在其中找到resolve
属性并添加:
"alias":{
'net':'net-browserify-alt'
},
所以你的解决方案可能看起来像:
"resolve": {
"extensions": [
".ts",
".js"
],
"alias":{
'net':'net-browserify-alt'
},
"modules": [
"./node_modules"
]
},
3- 导入并使用它:
declare var require;
const Quassel = require( 'libquassel/lib/libquassel.js' );
console.log( 'Quassel', Quassel );
var quassel = new Quassel( "quassel.domain.tld",
4242,
{ backloglimit : 10 },
function ( next ) {
next( "user", "password" );
} );
console.log( 'quassel', quassel );
注意:
看一下webpack配置,似乎webpack喜欢覆盖一些模块:
"node": {
"fs": "empty",
"global": true,
"crypto": "empty",
"tls": "empty",
"net": "empty",
"process": true,
"module": false,
"clearImmediate": false,
"setImmediate": false
}
我不太清楚为什么,但这个列表在webpack配置中,似乎导致net
变成未定义(空),这就是我们不得不创建别名的原因。
ng new
生成),所以我不太明白你的问题。 - alexandernst