【发布时间】:2016-12-12 01:20:57
【问题描述】:
我正在浏览一个开源编辑器项目,当我遇到这种奇怪的 require 语法时
var editorCss = require("./requirejs/text!./css/editor.css");
谁能告诉我这条线在做什么?需要路径中的!. 是什么?是作为一些参数传递到需要的文件中吗?
【问题讨论】:
标签: javascript node.js requirejs commonjs
我正在浏览一个开源编辑器项目,当我遇到这种奇怪的 require 语法时
var editorCss = require("./requirejs/text!./css/editor.css");
谁能告诉我这条线在做什么?需要路径中的!. 是什么?是作为一些参数传递到需要的文件中吗?
【问题讨论】:
标签: javascript node.js requirejs commonjs
感叹号使 RequireJS 使用插件来执行加载。感叹号前面的是插件,后面的是插件必须加载的。 require("./requirejs/text!./css/editor.css"); 告诉 RequireJS “加载插件 ./requirejs/text 并使用这个插件加载 ./css/editor.css。
这种语法恰好是 AMD 规范的一部分:RequireJS 是兼容的,因此支持它。其他支持 AMD 的加载器也可能支持它。
【讨论】:
require 不兼容 AMD。它遵循 CommonJS 标准。您可以使用this Node package 让 Node 直接加载 AMD 模块,但它一般不支持插件。它将与text!something 一起工作,但它通过“作弊”来做到这一点。它不会加载插件,也不会将控制权传递给它。它只是检测到text!的使用,并使用fs.readFileSync直接返回模块的内容。
Running "browserify:main" (browserify) task >> Error: Cannot find module './requirejs/text!./css/editor.css' Warning: Error running grunt-browserify. Use --force to continue. Aborted due to warnings.