如何使用 RequireJS 加载前端 NPM/Yarn 包

Posted

技术标签:

【中文标题】如何使用 RequireJS 加载前端 NPM/Yarn 包【英文标题】:How to load front end NPM/Yarn packages with RequireJS 【发布时间】:2018-01-09 01:43:33 【问题描述】:

我有一个用 Knockout 编写的前端 SPA。由于它的大小,我想将其拆分为多个文件,使我的文件夹结构看起来像这样:

node_modules
|- knockout
\- requirejs
components
|- MyFutureViewModel.js
\- etc.
index.html
app.js

Index.html 看起来像这样:

<!DOCTYPE html>
<html>
  <head>
    <title>NCounter</title>
    <meta charset="utf-8">
    <script type="text/javascript" data-main="app.js" src="./node_modules/requirejs/require.js"></script>
  </head>
  <body>
    <p>The name is <input data-bind="value: name" /></p>
    <p>You entered <span data-bind="text: name"></span>.</p>
  </body>
</html>

我的 app.js 文件如下所示:

requirejs.config(
  //Pass the top-level main.js/index.js require
  //function to requirejs so that node modules
  //are loaded relative to the top-level JS file.
  nodeRequire: require
);

require(['knockout'], function(ko) 
  var viewModel = function() 
    name: ko.observable('name')
  ;
  ko.applyBindings(viewModel);
);

但是,requirejs 似乎没有看到淘汰赛。有没有我遗漏的配置或步骤?

【问题讨论】:

【参考方案1】:

你必须修改你的 RequireJS 配置

requirejs.config( baseUrl: "node_modules/", paths: // assuming that knockout lives in the node_modules/knockout/knockout.js file // if not, you have to specify relative to `node_modules` path // without .js extension 'knockout': 'knockout/knockout', );

【讨论】:

以上是关于如何使用 RequireJS 加载前端 NPM/Yarn 包的主要内容,如果未能解决你的问题,请参考以下文章

WEB前端开发 使用requirejs 引入脚本为啥页面首次加载会出现其他依赖jquery的文件先于jquery加载

RequireJS简单实用说明

使用maven结合requirejs管理前端脚本

前端模块化:RequireJS

基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器

使用requirejs搭建前端项目