Laravel 使用 npm 安装前端依赖; 
npm 是一个类似 composer 的工具; 
用于管理前端的各种依赖包; 
在使用之前需要先安装 node ; 
Windows 下可以在官网下载安装: https://nodejs.org/zh-cn 
Mac 上可以通过 brew 安装;

brew install node
Bash

node 已经捆绑了 npm 不需要单独安装 npm 了; 
但是因为那堵墙的原因还需要设置淘宝的 npm 镜像;

npm config set registry https://registry.npm.taobao.org
Bash

然后就可以执行安装命令了;

npm install
Bash

在 Laravel 项目根目录下有一个类似 composer.json 的 package.json 文件;

{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.17",
"bootstrap-sass": "^3.3.7",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^1.0",
"lodash": "^4.17.4",
"vue": "^2.5.7"
}
}
JSON

当执行 npm install 的时候就和 composer install 一样; 
安装完成后会生成 package-lock.json 文件; 
想下 composer.lock 就能知道 package-lock.json 的作用了; 
package.json 中的 scripts 和 composer.json 中的 script 作用也类似; 
比如说上面的 dev script 就可以通过下面这种方式运行:

npm run dev
Bash

在开发中常用下面这 3 个命令; 
| 命令 | 作用 |
| dev | 编译、合并 | 
| prod | 编译、合并、压缩 | 
| watch | 自动监听文件变动进行编译、合并 |
这些 script 都是依赖 webpack 来打包压缩合并; 
webpack 的配置对后端开发人员来说有那么一点不直观; 
Laravel 官方又提供了 laravel-mix 来简化 webpack ; 
在 Laravel 项目根目录中的 webpack.mix.js 就是 webpack 的配置文件;

let mix = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
JavaScript

这里面分别定义了前端资源的源文件和处理后的目标文件路径; 
| 处理前的源文件 | 处理后的文件目录 | 
| resources/assets/js/app.js | public/js |
| resources/assets/sass/app.scss | public/css | 
默认情况下 resources/assets/js/app.js 中引入了 bootstrap.js 和 vue.js ; 
这里示例先只保留 bootstrap.js ; 
resources/assets/js/app.js

require('./bootstrap');
JavaScript

当我们想使用某个前端插件的时候我们可以去 https://npmjs.com 上搜索; 
这一步又跟 composer 的 https://packagist.org 一毛一样; 
掌握了 composer 的使用后再看 npm 也是可以很快入手的; 
比如说我们想找一个 bootstrap 的日期插件;

 

安装插件;

npm i bootstrap-datepicker
Bash

然后引入 css 文件; 
resources/assets/sass/app.scss

// Fonts
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600"); // Variables
@import "variables"; // Bootstrap
@import "~bootstrap-sass/assets/stylesheets/bootstrap"; @import "~bootstrap-datepicker/dist/css/bootstrap-datepicker";
JavaScript

引入 css 文件使用的是 import ; 
路径可以点开 node_modules 目录查看; 
除了引用 node_modules 目录下的文件还可以引用自己创建的文件; 
比如说创建一个 resources/assets/js/bootstrap-datepicker.js 文件;

require('bootstrap-datepicker/dist/js/bootstrap-datepicker');
$('.datepicker').datepicker();
JavaScript

引入 js 文件使用的是 require ; 
在 resources/assets/js/app.js 中引入 bootstrap-datepicker ;

require('./bootstrap');
require('./bootstrap-datepicker');
JavaScript

编译合并压缩:

npm run prod
Bash

创建示例路由 routes/web.php ;

Route::view('mix/view', 'mix.view');
PHP

创建视图文件 resources/views/mix/view.blade.php ;

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>前端</title>
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
</head>
<body> <input class="datepicker" type="text"> <script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
HTML

这里使用 asset() 函数生成资源链接;

 

一个日期插件就这样完成了; 
查看源代码可以发现所有的 css 和 js 内容都合并成了 app.css 和 app.js;

 

但是现在还不完美; 
因为当我们改动文件后容易因为缓存不能及时加载新的 css 和 js ; 
常见的做法是给 css 和 js 加个版本号; 
这在 Laravel 也很容易实现; 
只需要在 webpack.mix.js 中使用 version()
webpack.mix.js

let mix = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.version();
JavaScript

视图文件中把 asset() 换成 mix() 即可; 
resources/views/mix/view.blade.php

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>前端</title>
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
</head>
<body> <input class="datepicker" type="text"> <script src="{{ mix('js/app.js') }}"></script>
</body>
</html>
HTML

最适合入门的Laravel中级教程(四)前端开发的更多相关文章

  1. 最适合入门的Laravel中级教程(一)

    Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...

  2. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  3. 最适合入门的Laravel中级教程(三)表单验证

    做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...

  4. CSS预编译器:Sass(入门),更快的前端开发

    SASs是由美国注册会计师协会(AICPA)下属审计准则委员会(ASB)发布,是为了便于注册会计师执行和落实一般公认审计准则(GAAS). Sass 扩展了 CSS3,增加了规则.变量.混入.选择器. ...

  5. Laravel初级教程浅显易懂适合入门

    整理了一些Laravel初级教程,浅显易懂,特适合入门,留给刚学习laravel想快速上手有需要的朋友 最适合入门的laravel初级教程(一)序言 最适合入门的laravel初级教程(二)安装使用 ...

  6. Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

    Laravel 5 系列入门教程(一)[最适合中国人的 Laravel 教程] 分享⋅ johnlui⋅ 于 2年前 ⋅ 最后回复由 skys215于 11个月前 ⋅ 17543 阅读   原文发表在 ...

  7. Laravel 从入门到精通系列教程

    转载;https://laravelacademy.org/laravel-tutorial-5_7 适用于 Laravel 5.5.5.6.5.7 版本,本系列教程将围绕一个 LTS 版本,然后采取 ...

  8. 无废话ExtJs 入门教程四[表单:FormPanel]

    无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...

  9. Laravel教程 四:数据库和Eloquent

    Laravel教程 四:数据库和Eloquent 此文章为原创文章,未经同意,禁止转载. Eloquent Database 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方 ...

随机推荐

  1. java中转译符用"\\"的几种特殊字符

    在使用split的方法进行分隔时,要对这几种特殊字符进行"\\"分隔 | * ^ : . 1."|" 示例: String[] splitAddress=add ...

  2. acrgis导出成tiff图片,全是黑色

    任务:将北京道路矢量数据转成栅格然后导出成tiff格式图片. 1. 北京道路有很多种,矢量合并---用到了merge工具 arcgis位置:data management----general---- ...

  3. 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法

    转载:http://www.cnblogs.com/wang-meng/p/8887436.html 1,申请邮箱   地址为:http://mdu.edu.rs/  邮箱的前缀可以改成自己喜欢的字符 ...

  4. 姿势估计实验-Realtime_Multi-Person_Pose_Estimation-CMU

    前言: 论文及源代码网址: https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation 地址2: https://github.com/ ...

  5. 《从Lucene到Elasticsearch:全文检索实战》学习笔记四

    今天我给大家讲讲布尔检索模型基本概念 布尔检索模型: 检索模型是判断文档内容与用户相关性的核心技术,以大规模网页搜索为例,在海量网页中与用户查询关键词相关的网页可能会有成千上万个,甚至耕读哦.那么信息 ...

  6. python: ImportError:DLL load failed 解决方法。

    在学习使用wordcloud 库创建词云过程中,mooc里提到可以使用另一个库函数,来创建不同形状的词云. 就是这句: ... from scipy.misc import imread mk = i ...

  7. [zz]有哪些优秀的科学网站和科研软件推荐给研究生?

    https://www.zhihu.com/question/37061410 如题,各位科研前辈,有没有一些好的科研网站或者适合科研人员用的软件以及APP,推荐给一只研一的菜鸡,帮助我们提高科研效率 ...

  8. write(6)、write(10)和write(16)以及read(6)、read(10)和read(16)的区别与应用

    大家知道,我们读写硬盘的时候发送的命令为SCSI READ或SCSI WRITE.即SCSI读和SCSI写命令.但是READ和WRITE有很多种,这些命令的应用场合是什么呢? 最重要的一点就是,这是跟 ...

  9. eclipse 安装配置

    https://blog.csdn.net/jklinux/article/details/77861450 JAVA环境配置 https://jingyan.baidu.com/article/db ...

  10. 实验-12-JSP简单入门

    参考资料 JSP实验参考文件 主要看实验任务书 实验1. 第一个HTML页面与Tomcat 实验内容:任务书中的JSP-实验1. 1.1 EclipseJEE的使用 新建Tomcat Server 新 ...