通过npm安装Twitter Bootstrap的目的?

问题1:

通过npm安装Twitter Bootstrap的确切目的是什么?我以为npm是为服务器端模块设计的。自己提供引导文件是否比使用CDN更快?

问题2:

如果我要npm安装Bootstrap,我如何指向Bootstrap .js和Bootstrap .css文件?

142318 次浏览
    如果你想重新编译/修改更少的文件/测试,使用npm/bower安装bootstrap。使用grunt可以更容易地做到这一点,如http://getbootstrap.com/getting-started/#grunt所示。 如果你只想添加预编译的库,可以手动将文件包含到项目中
  1. 不,你必须自己做这个或使用单独的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”如果我没有错的话。

  1. 使用CDN的重点是它是,首先,因为它是一个分布式网络,但其次,因为静态文件是由浏览器缓存的,而且可能性很高,例如,您的站点使用的CDN的jquery库已经被用户的浏览器下载,因此文件已经被缓存,因此没有不必要的下载发生。也就是说,这仍然是一个好主意。

    现在,bootstrap的npm包的要点

    它提供了bootstrap的javascript文件作为模块。如上所述,这使得使用browserify require它成为可能,这是最有可能的用例,据我所知,这也是在npm上发布bootstrap的主要原因

  2. 如何使用

    想象一下下面的项目结构:

    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:

<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文件要好得多:

var bootstrap = require('bootstrap');

你只在那些你真正需要bootstrap.jsjavascript文件中包含这段代码。Browserify负责为你包含这个文件。

现在,缺点是你现在有你的前端文件作为node_modules依赖项,并且node_modules文件夹通常不会用git签入。我认为这是最有争议的部分,有很多意见解决方案


2017年3月更新

从我写这个答案到现在已经快两年了,现在有了更新。

现在普遍接受的方法是使用打包机,如webpack(或其他选择的绑定器)来在构建步骤中绑定所有资产。

首先,它允许你像browserify一样使用commonjs语法,所以在你的项目中包括bootstrap js代码,你可以做同样的事情:

const bootstrap = require('bootstrap');

至于css文件,webpack有所谓的“加载器”。它们允许你在js代码中这样写:

require('bootstrap/dist/css/bootstrap.css');

和CSS文件将“神奇地”包含在您的构建中。 当你的应用程序运行时,它们将作为<style />标记动态添加,但你可以配置webpack将它们导出为一个单独的css文件。你可以在webpack的文档中阅读更多关于它的内容

在结论。

  1. 你应该将你的应用代码“捆绑”到一个捆绑器中
  2. 你不应该将node_modules或动态构建的文件提交给git。你可以在npm中添加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你可以在需要的时候简单地更新…我想更容易些。