我正在尝试使用NW.js构建一个简单的桌面应用。受到包括this one在内的一些帖子的启发,我想尝试一种纯粹的npm
方法,而不是bower
,grunt
或gulp
。
所以我继续使用安装为jquery
模块的bootstrap
和npm
库。当我在我的应用程序的JavaScript中注入模块时,这样:
global.jQuery = $ = require("jquery");
var bootstrap = require("bootstrap");
我从ReferenceError: document is not defined
获得bootstrap
。我可以用老式的方式加载bootstrap
html文档:
<script type="text/javascript" src="node_modules/bootstrap/dist/js/bootstrap.js"></script>
我问自己,在脚本文件中加载引导槽require
是否是一个愚蠢的想法?基本上,我不需要那里。它可以通过html中的脚本标记加载。什么是最佳做法?我糊涂了。
更新。解决方案
在听取了@Kuf的建议后,我创建了一个build.js
脚本
var copyfiles = require('copyfiles');
copyfiles(["node_modules/bootstrap/dist/js/bootstrap.js", "vendor/js"], true, function (err) {
if (err) return console.error(err);
});
copyfiles(["node_modules/bootstrap/dist/css/bootstrap.css", "vendor/css"], true, function (err) {
if (err) return console.error(err);
});
由prestart
钩子触发:
"scripts": {
"build": "node build.js",
"prestart": "npm run build"
}
允许我通过方便的路径访问bootstrap
资源:
<link href="vendor/css/bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="vendor/js/bootstrap.js"></script>
答案 0 :(得分:1)
我认为发生错误的原因是您在没有窗口上下文的情况下运行require。你在哪里运行包括?请注意,对于从node-main
运行的代码:
window:...在加载脚本时不可用,因为 脚本在DOM窗口加载之前执行。 (source)
即使使用require导入JS,您仍然需要包含css文件。我认为还没有“干净”或开箱即用的解决方案。虽然你正在做的事情肯定会起作用,但它会产生奇怪而不自然的脚本路径。
我会添加一个版本script:
"scripts": {
"build": "node build.js"
}
在package.json中将从node_modules复制到'/ dist /'以使路径更清晰。