代码之家  ›  专栏  ›  技术社区  ›  Jesse Orange

《拉雷维尔》中NPM、作曲家和鲍尔之间的区别?

  •  7
  • Jesse Orange  · 技术社区  · 6 年前

    所以在拉雷维尔 Composer ,则, NPM Bower ,我知道他们都是防臭经理。

    创作者 -这似乎侧重于PHP依赖项,包列表是由 composer.json 。若要安装软件包,您可以添加到此文件或运行 php composer install <package>

    NPM公司 -这似乎集中在JavaScript依赖性上,但也有大量的包。安装的软件包 npm install package.json 文件

    凉亭 -据我所知,这是针对前端软件包的?

    在Laravel中,如果您愿意,您可以使用所有三个,但如果可以通过(比如)两者访问库,为什么要使用其中一个呢 npm composer ?

    例如,在安装Laravel时,它们有两个文件:

    • app.js -应用程序的主js文件
    • bootstrap.js -应用程序中包含的文件。js引入一些依赖项

    这是我的 独自创立js公司 在里面 resources/js

    window._ = require('lodash');
    window.Popper = require('popper.js').default;
    
    /**
     * We'll load jQuery and the Bootstrap jQuery plugin which provides support
     * for JavaScript based Bootstrap features such as modals and tabs. This
     * code may be modified to fit the specific needs of your application.
     */
    
    try {
        window.$ = window.jQuery = require('jquery');
    
        require('bootstrap');
        require('slick-carousel');
        require('isotope-layout/dist/isotope.pkgd.min.js');
        require('tablesorter/dist/js/jquery.tablesorter.combined.min.js');
    } 
    
    catch (e) {}
    
    /**
     * We'll load the axios HTTP library which allows us to easily issue requests
     * to our Laravel back-end. This library automatically handles sending the
     * CSRF token as a header based on the value of the "XSRF" token cookie.
     */
    
    window.axios = require('axios');
    
    window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
    
    /**
     * Next we will register the CSRF Token as a common header with Axios so that
     * all outgoing HTTP requests automatically have it attached. This is just
     * a simple convenience so we don't have to attach every token manually.
     */
    
    let token = document.head.querySelector('meta[name="csrf-token"]');
    
    if (token) {
        window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
    } else {
        console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
    }
    
    /**
     * Echo exposes an expressive API for subscribing to channels and listening
     * for events that are broadcast by Laravel. Echo and event broadcasting
     * allows your team to easily build robust real-time web applications.
     */
    
    // import Echo from 'laravel-echo'
    
    // window.Pusher = require('pusher-js');
    
    // window.Echo = new Echo({
    //     broadcaster: 'pusher',
    //     key: process.env.MIX_PUSHER_APP_KEY,
    //     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    //     encrypted: true
    // });
    

    在里面 app.css 我有这个:

    /* 
     * This file takes all of the styling we need and compiles it into one nice CSS file.
     * You'll notice you can pull in anything from the node_modules folder use a Tiddle (~)
    */
    
    @import '~bootstrap/dist/css/bootstrap.min.css'; // Bootstrap 3.3.7 CSS
    @import '~slick-carousel/slick/slick.css';       // Slick Carousel base CSS
    
    @import "variables";                             // Sass Variables
    
    @import "partials/typography";                   // All from this point are from the partials folder
    @import "partials/mixins";
    @import "partials/helpers";
    @import "partials/navigation";
    @import "partials/breadcrumb-bar";
    @import "partials/welcome-box";
    @import "partials/form-box";
    @import "partials/content-box";
    @import "partials/carousels";
    @import "partials/tables";
    @import "partials/interactions-row";
    @import "partials/downloads-area";
    @import "partials/articles-events";
    @import "partials/biography-pages";
    @import "partials/grid";
    @import "partials/footer";
    @import "partials/steve-custom.scss";
    

    真正让我感到困惑的是:如何 应用程序。js公司 知道我指的是 node_modules 文件夹以及如何 应用程序。css 我知道我指的是引导,只是使用 ~ ?

    为什么我不必指定绝对路径?

    是JavaScript相关项通常来自的一般经验法则 npm公司 PHP依赖项来自 创作者 ?

    我的困惑是因为我在看一个名为Laravel Full Calendar的包,它的样式和JS代码似乎是通过npm提取的,但其依赖PHP的部分是从Composer提取的?

    这是正常行为吗?

    我知道这里有很多问题,但我觉得Laracasts没有解释这些包管理器的实际用法。

    1 回复  |  直到 6 年前
        1
  •  7
  •   Kevin Woblick    6 年前

    首先,简要说明这三个依赖关系管理器。

    创作者

    Composer 是一种管理工具 PHP 依赖项。它使用 Packagist 获取有关依赖项的信息并为您正确安装它们。

    NPM公司

    NPM 是节点生态系统的一部分,主要用于管理节点的依赖关系。js应用程序。然而,随着Node变得越来越流行,人们开始将NPM不仅仅用于Node。js模块。现在,它是管理您的 JavaScript 依赖项。

    凉亭

    与NPM类似, Bower 管理 JavaScript 依赖项。然而,创建Bower是为了分离前端开发包(如Bootstrap、jQuery等)从整个节点模块生态系统出发,还为CSS提供了一个包管理器。它提供了NPM没有或没有提供的一些功能。

    总结一下:Composer用于PHP包,NPM和Bower用于JavaScript包。 我很确定Composer和NPM都没有可用的软件包,因为它们专注于两种非常不同的编程语言。然而,鲍尔可以被NPM取代,反之亦然。在我看来,Bower有点不受欢迎,因为还有其他一些工具要先进得多,而且大多数项目只使用NPM进行依赖关系管理。


    让我们继续回答您的问题。

    应用程序如何运行。js知道我指的是node\u modules文件夹中的文件夹,以及应用程序的工作方式。css知道我只是通过使用~?

    不是文件本身知道颚化符( ~ )是 node_modules 目录编译器【1】知道应该在提到tilde的目录中查找包。
    请注意,波浪线(>node\u modules同义词是用于CSS开发的概念,而不是用于JavaScript。

    为什么我不必指定绝对路径?

    你可以。也可以使用相对路径。或瓷砖。事实上,这没有任何区别。这取决于您使用的编译器。

    JavaScript相关项通常来自npm,PHP依赖项通常来自composer,这是一般的经验法则吗?

    这不是经验法则,这是必须做的。您无法通过NPM找到PHP模块,反之亦然。

    我的困惑是因为我在看一个名为Laravel Full Calendar的包,它的样式和JS代码似乎是通过npm提取的,但其依赖PHP的部分是从Composer提取的?

    绝对合理。如果您有一个Laravel软件包,它向您的应用程序添加了对Fullcalendar的支持,那么我将创建一个独立于NPM软件包的PHP软件包。PHP包构建HTML,而NPM包只提供CSS和JavaScript。
    我不会把这叫做 典型的 但正如我所说,完全合理。


    我希望我以你理解的方式回答了你的问题。我同意依赖关系管理的整个概念及其差异不那么容易理解。如果你还有其他问题,请留下评论。


    [1] 编译器(>);可以是任何转换应用程序的模块。SCS进入应用程序。css。例如节点sass。