问题1:
通过npm安装Twitter Bootstrap的确切目的是什么?我以为npm是为服务器端模块设计的。自己提供引导文件是否比使用CDN更快?
问题2:
如果我要npm安装Bootstrap,我如何指向Bootstrap .js和Bootstrap .css文件?
不,你必须自己做这个或使用单独的grunt工具。例如'grunt-contrib-concat' 如何用Grunt.js (0.3.x) .js连接和缩小多个CSS和JavaScript文件
回答1:
通过npm(或bower)下载bootstrap可以让你获得一些延迟时间。而不是获得一个远程资源,你得到一个本地的,这是更快的,除非你使用cdn(检查下面的答案)
“npm”最初是为了获得节点模块,但随着Javascript语言的分类(以及browserify的出现),它有了一点成长。事实上,你甚至可以在npm上下载AngularJS,这不是一个服务器端框架。Browserify允许你在客户端使用AMD/RequireJS/CommonJS,这样节点模块就可以在客户端使用。
答案2:
如果你npm安装bootstrap(如果你没有使用特定的grunt或gulp文件移动到dist文件夹),你的bootstrap将位于“./node_modules/bootstrap/bootstrap.min.css”如果我没有错的话。
jquery
它提供了bootstrap的javascript文件作为模块。如上所述,这使得使用browserify require它成为可能,这是最有可能的用例,据我所知,这也是在npm上发布bootstrap的主要原因
require
想象一下下面的项目结构:
project |-- node_modules |-- public | |-- css | |-- img | |-- js | |-- index.html |-- package.json
In your index.html you can reference both css and js files like this:
index.html
css
js
<link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css"> <script src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
这是最简单的方法,并且适用于.css文件。但是在你的public/js/*.js文件中包含这样的bootstrap.js文件要好得多:
.css
public/js/*.js
bootstrap.js
var bootstrap = require('bootstrap');
你只在那些你真正需要bootstrap.js的javascript文件中包含这段代码。Browserify负责为你包含这个文件。
javascript
现在,缺点是你现在有你的前端文件作为node_modules依赖项,并且node_modules文件夹通常不会用git签入。我认为这是最有争议的部分,有很多意见和解决方案。
node_modules
git
从我写这个答案到现在已经快两年了,现在有了更新。
现在普遍接受的方法是使用打包机,如webpack(或其他选择的绑定器)来在构建步骤中绑定所有资产。
首先,它允许你像browserify一样使用commonjs语法,所以在你的项目中包括bootstrap js代码,你可以做同样的事情:
const bootstrap = require('bootstrap');
至于css文件,webpack有所谓的“加载器”。它们允许你在js代码中这样写:
require('bootstrap/dist/css/bootstrap.css');
和CSS文件将“神奇地”包含在您的构建中。 当你的应用程序运行时,它们将作为<style />标记动态添加,但你可以配置webpack将它们导出为一个单独的css文件。你可以在webpack的文档中阅读更多关于它的内容
<style />
在结论。
build
如果你NPM这些模块,你可以使用静态重定向来服务它们。
首先安装软件包:
npm install jquery npm install bootstrap
然后在server.js中:
var express = require('express'); var app = express(); // prepare server app.use('/api', api); // redirect API calls app.use('/', express.static(__dirname + '/www')); // redirect root app.use('/js', express.static(__dirname + '/node_modules/bootstrap/dist/js')); // redirect bootstrap JS app.use('/js', express.static(__dirname + '/node_modules/jquery/dist')); // redirect JS jQuery app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap
最后,在.html中:
<link rel="stylesheet" href="/css/bootstrap.min.css"> <script src="/js/jquery.min.js"></script> <script src="/js/bootstrap.min.js"></script>
我不会直接从你的server.js文件所在的文件夹(通常与node_modules相同)提供页面作为由timetowonder提议,这样人们就可以访问你的server.js文件。
当然你可以简单地下载和复制&粘贴到你的文件夹上,但是使用NPM你可以在需要的时候简单地更新…我想更容易些。