问题1:

通过npm安装Twitter bootstrap 程序的目的到底是什么?我以为npm是为服务器端模块设计的.自己提供 bootstrap 文件比使用CDN更快吗?

问题2:

如果我要npm安装 bootstrap 程序,我将如何指向 bootstrap 程序.js和bootstrap.css文件?

推荐答案

  1. 使用CDN的意义在于它是faster,首先是因为它是一个distributed网络,其次是因为浏览器正在缓存静态文件,并且很有可能,例如,您的站点使用的CDN jquery库已经被用户的浏览器下载,因此文件已经被缓存,因此没有不必要的下载发生.尽管如此,这仍然是一个好主意.

    现在,bootstrap的npm包的要点是

    它将 bootstrap 的javascript文件作为module文件提供.如上所述,这使得使用browserify来实现require it成为可能,这是最有可能的用例,据我所知,也是 bootstrap 发布在npm上的主要原因.

  2. 如何使用它

    想象一下以下项目 struct :

    project
    |-- node_modules
    |-- public
    |   |-- css
    |   |-- img
    |   |-- js
    |   |-- index.html
    |-- package.json
    
    

index.html中,您可以引用cssjs个文件,如下所示:

<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');

你只需要在javascript个文件中包含这段代码,而这些文件实际上需要bootstrap.js个.Browserify负责为您包含此文件.

现在,缺点是您现在将前端文件作为node_modules个依赖项,而node_modules文件夹通常不使用git签入.我认为这是最有争议的部分,有opinionssolutions个.


UPDATE March 2017

自从我写下这个答案以来,已经过go 了将近两年,更新已经到位.

现在,普遍接受的方法是使用bundler-like webpack(或另一个 Select 的绑定器)在构建步骤中绑定所有assets资源 .

首先,它允许您像browserify一样使用commonjs语法,所以要在项目中包含 bootstrap js代码,您也可以这样做:

const bootstrap = require('bootstrap');

至于css个文件,webpack称之为"loaders".它们允许您在js代码中编写:

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

css文件将"神奇地"包含在您的构建中.

总之.

  1. 你应该用绑定器"绑定"你的应用程序代码
  2. 您不应该将node_modules或动态构建的文件提交给git.您可以向npm添加build脚本,该脚本应用于在服务器上部署文件.无论如何,这可以通过不同的方式来完成,具体取决于您首选的构建过程.

Node.js相关问答推荐

如何在Node.js 应用程序中从react js公共目录渲染图像?

链接Inbox类方法,范围在哪里以及为什么发生变化?

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

PM2 是否需要成为其托管项目的依赖项?

如何在MongoDB中删除嵌套对象数组中的属性?

Postgressql的BIGSERIAL自增序列,即使由于唯一约束错误没有创建行,也会自动增加

node-gyp: "..\src\binding.cc: 没有这样的文件或目录"

kubernetes 上的 nextjs 无法启动

MongoDB 根据使用聚合的条件从嵌套数组中删除对象

Mongodb 从文档中获取聚合结果中的特定属性

[NodeJs 从 ADAL 升级到 MSAL]:无法在字符串上创建属性authenticationScheme

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

如何为一个网站实现这 2 个网址.即 www.administrator.sitename.com 和 www.sitename.com?

如何在 node.js 环境中从 WebAssembly (Rust) 调用异步 JavaScript 导入函数?

Node.js 服务器中没有缓存

无法获取 CSS 文件

如何在不全局安装的情况下在 Node REPL 中要求 node 模块?

npm install packagename --save-dev 不更新 package.json