介绍:
我建立了一个管理模板(css + js),我把它上传到了npm。该软件包包含“dist”文件夹中已编译的css / js文件,以及“build”文件夹中的scss文件。该包有几个依赖项,在devDependencies
中列为package.json
:
"devDependencies": {
"datatables.net": "^1.10.19",
"dropzone": "^5.5.1",
"laravel-mix": "^4.0.13",
...
}
没有dependencies
,我认为这是正确的,因为我直接使用编译的css / js(js只是jQuery代码)。
有一个admin.scss
文件,其中包含所有导入:
@import 'abstracts/variables';
@import
'~datatables.net-bs4/css/dataTables.bootstrap4.min.css',
'~easymde/dist/easymde.min.css',
'~flatpickr/dist/flatpickr.min.css',
'~jasny-bootstrap/dist/css/jasny-bootstrap.min.css',
'~selectizebootstrap/dist/css/selectize.bootstrap4.css';
@import
'components/alerts',
'components/cards';
我在PHP项目(Laravel)中使用管理包。管理包包含在我的PHP项目的devDependencies
中。 admin.css
文件包含在php.scss
文件中:
@import '../../node_modules/admin-template/dist/css/admin.css';
问题:
我需要更改admin.scss
文件的一些变量。所以,而不是包括编译的css
我需要包括scss
:
@import '../../node_modules/admin-template/build/scss/admin';
如果我这样做,我会收到错误,因为管理模板devDependencies
没有安装在我的node_modules
中。
如果在admin模板文件夹中执行npm install
,则会创建一个node_modules
文件夹,并且所有依赖项都安装在该文件夹中。
但错误并没有消失,我认为是因为在scss文件的导入中使用的tilde
:@import '~datatables.net-bs4/css/dataTables.bootstrap4.min.css'
。它正在寻找根文件夹中的文件(不在包中)。
我该怎么办?
devDependencies
添加为我的PHP项目的devDependencies
?似乎不对。devDependencies
列为dependencies
,所以当我安装软件包时,所有依赖项也都安装了吗?似乎也不对,那些是devDependencies
。tilde ~
文件中所有@imports
的admin.scss
?因此,如果我需要直接包含scss,我需要在包中做一个npm install
。如果我已经在我的node_modules
中安装了一些软件包,它们将会是两次。简短回答,也将它们放入admin-template/package.json
的“optionalDependencies”字段中。
这样,当你:
cd php-project
npm install admin-template
# or simply `npm install` if it's already in "dependencies"
admin-template
的“optionalDependencies”,与datatables.net-bs4
一样,将被安装到顶级node_modules
文件夹中。另外,“optionalDependencies”,语义似乎对我来说非常正确。
现在,如果您真的关心只在您的软件包中使用.css
的用户的安装足迹,那么很遗憾,没有简单的方法可以做到这一点。
你不可避免地要求.scss
的用户做一些额外的工作。您可以为他们提供有关如何手动执行此操作的指南,也可以提供自动执行该操作的脚本。
一种可能的解决方案是您还提供bin文件。
admin-template/bin/admin-template-enable-sass.js # or .sh if you prefer
// package.json
{
"bin": "bin/admin-template-enable-sass.js"
}
这样,当用户npm install admin-template
时,该bin文件被符号链接到顶级node_module/.bin
,使其可以使用npx
cli命令运行。
现在你的.scss
高级用户只需键入:
npx admin-template-enable-sass
让你的脚本为他们照顾好事情。