我有如下的Bower文件:
group :vendor, assets_path: 'assets/shop' do
asset 'jquery', '2.2.1'
asset 'lodash', '4.6.1'
...
end
现在我在文件夹vendor/assets/shop
中看到了输出,这是在docs中指定的。
我想理解的是什么是"Rails DSL配置"。的真正意思是什么呢?什么是"Rails DSL配置"?甚至"DSL配置";看起来像什么?我四处看了看,找不到这句话的确切含义。
DSL是领域特定语言。"域Specific"这里的意思是该语言用于非常特殊的用途,在这种情况下,它仅用于配置鲍尔。相比之下,像Ruby或JSON这样的通用语言可以用于任何事情。
dsl用于使编写代码或配置更自然、更方便,并且对该领域的人来说更不容易出错。它使其更具声明性,填充默认值,并将您限制为您需要的域。
这是一个DSL配置。
resolution "angular", "1.2.22"
相当于这个JSON配置。
{
"name" : "dsl-generated-dependencies",
"dependencies": {
"angular": "1.2.22"
},
"resolutions": {
"angular": "1.2.22"
}
}
Bower提供了两个配置选项。您可以使用DSL生成JSON配置,也可以手工编写JSON。
虽然有时dsl是自己完整的语言,有自己的语法和解析器,但在Ruby中dsl通常只是Ruby。resolution "angular", "1.2.22"
只是一个方法调用:self.resolution("angular", "1.2.22")
。resolution
知道如何把它变成完整的鲍尔配置。
您的示例代码是在一个过程中传递group
的方法调用。
self.group(:vendor, assets_path: 'assets/shop') do
self.asset('jquery', '2.2.1')
self.asset('lodash', '4.6.1')
...
end
Ruby dsl的其他示例包括Rails中的config/routes.rb
,
get '/patients/:id', to: 'patients#show', as: 'patient'
Gemfiles,
gem "nokogiri", ">= 1.4.2"
和FactoryBot。
factory :user do
first_name { "John" }
last_name { "Doe" }
admin { false }
end
它们都是花哨的Ruby方法调用和块。